C++运行结果出现1.#INF

时间:2021-07-21 15:33:05
我的代码
#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

#5


 错了 
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
 

#9


用__int64

#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


引用 9 楼 logiciel 的回复:
用__int64


C/C++ code
#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)
{
……

结果是溢出后的结果,整型运算如果溢出是会自动截断的,而浮点会出错。

#11


谢谢keiy的指正!

#1


结果溢出了,超出了数的表示范围。

#2


应该是这个问题 那要怎么改进呢

#3


你的seq函数是实现什么功能啊?

#4


   n      输出
   3       2
   4       5
   5       32

#5


 错了 
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
 

#9


用__int64

#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


引用 9 楼 logiciel 的回复:
用__int64


C/C++ code
#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)
{
……

结果是溢出后的结果,整型运算如果溢出是会自动截断的,而浮点会出错。

#11


谢谢keiy的指正!