#include<iostream.h>
double seq(double x);
void main()
{
double n,sum;
cin>>n;
sum=2*seq(n);
cout<<sum<<endl;
}
double seq(double x)
{
if(x>3)
return (x-2)*seq(x-1)+1;
else
return 2;
}
题目要求n可以取到200
可是我的程序取200时出现1.#INF 哪里出问题了 要如何改进
11 个解决方案
#1
结果溢出了,超出了数的表示范围。
#2
应该是这个问题 那要怎么改进呢
#3
你的seq函数是实现什么功能啊?
#4
n 输出
3 2
4 5
5 32
3 2
4 5
5 32
#5
错了
5 16
5 16
#6
如果你没有支持更大数的编译器(我用BCB 2010,用long double可以算到200结果为:1.07728e+371),那么只有自己写大数运算的函数了
#7
大数运算的函数?偶不会啊
#8
这个是一个课题,很多人在研究,网上也有很多,如:
http://topic.csdn.net/u/20071224/23/9536bf4f-baab-434e-9b2d-b2a01ddc388f.html
http://www.emath.ac.cn/hugecalc/
等。如果你不想研究,还是且要用200位,用bcb(c++ builder)的long doube就可以实现(vc 也有long double 但它的精度与double相同)
BCB的long double 范围为(来自BCB HELP):
long double 80(bit) 3.37 10^-4932 < |X| < 1.18 10^4932 Financial (18-digit precision)
而VC 的(来自MSDN):
double 8(byte) 1.7E +/- 308 (15 digits)
long double same as double same as double
http://topic.csdn.net/u/20071224/23/9536bf4f-baab-434e-9b2d-b2a01ddc388f.html
http://www.emath.ac.cn/hugecalc/
等。如果你不想研究,还是且要用200位,用bcb(c++ builder)的long doube就可以实现(vc 也有long double 但它的精度与double相同)
BCB的long double 范围为(来自BCB HELP):
long double 80(bit) 3.37 10^-4932 < |X| < 1.18 10^4932 Financial (18-digit precision)
而VC 的(来自MSDN):
double 8(byte) 1.7E +/- 308 (15 digits)
long double same as double same as double
#9
用__int64
当n=200时,结果为4801613448650917194。
#include<iostream>
using namespace std;
__int64 seq(__int64 x);
void main()
{
__int64 n,sum;
cin>>n;
sum=2*seq(n);
cout<<sum<<endl;
}
__int64 seq(__int64 x)
{
cout<<x<<endl;
if(x>3)
return (x-2)*seq(x-1)+1;
else
return 2;
}
当n=200时,结果为4801613448650917194。
#10
结果是溢出后的结果,整型运算如果溢出是会自动截断的,而浮点会出错。
#11
谢谢keiy的指正!
#1
结果溢出了,超出了数的表示范围。
#2
应该是这个问题 那要怎么改进呢
#3
你的seq函数是实现什么功能啊?
#4
n 输出
3 2
4 5
5 32
3 2
4 5
5 32
#5
错了
5 16
5 16
#6
如果你没有支持更大数的编译器(我用BCB 2010,用long double可以算到200结果为:1.07728e+371),那么只有自己写大数运算的函数了
#7
大数运算的函数?偶不会啊
#8
这个是一个课题,很多人在研究,网上也有很多,如:
http://topic.csdn.net/u/20071224/23/9536bf4f-baab-434e-9b2d-b2a01ddc388f.html
http://www.emath.ac.cn/hugecalc/
等。如果你不想研究,还是且要用200位,用bcb(c++ builder)的long doube就可以实现(vc 也有long double 但它的精度与double相同)
BCB的long double 范围为(来自BCB HELP):
long double 80(bit) 3.37 10^-4932 < |X| < 1.18 10^4932 Financial (18-digit precision)
而VC 的(来自MSDN):
double 8(byte) 1.7E +/- 308 (15 digits)
long double same as double same as double
http://topic.csdn.net/u/20071224/23/9536bf4f-baab-434e-9b2d-b2a01ddc388f.html
http://www.emath.ac.cn/hugecalc/
等。如果你不想研究,还是且要用200位,用bcb(c++ builder)的long doube就可以实现(vc 也有long double 但它的精度与double相同)
BCB的long double 范围为(来自BCB HELP):
long double 80(bit) 3.37 10^-4932 < |X| < 1.18 10^4932 Financial (18-digit precision)
而VC 的(来自MSDN):
double 8(byte) 1.7E +/- 308 (15 digits)
long double same as double same as double
#9
用__int64
当n=200时,结果为4801613448650917194。
#include<iostream>
using namespace std;
__int64 seq(__int64 x);
void main()
{
__int64 n,sum;
cin>>n;
sum=2*seq(n);
cout<<sum<<endl;
}
__int64 seq(__int64 x)
{
cout<<x<<endl;
if(x>3)
return (x-2)*seq(x-1)+1;
else
return 2;
}
当n=200时,结果为4801613448650917194。
#10
结果是溢出后的结果,整型运算如果溢出是会自动截断的,而浮点会出错。
#11
谢谢keiy的指正!