C ++:简单方程有问题吗?

时间:2010-11-18 13:52:36

标签: c++ visual-c++

我在Windows XP上使用Visual C ++ 6.0。我的代码如下:

# include "stdio.h"
void main () {
 int m,n;
 double sum=0;
 n=65536;
 sum=1.0/(n*n);
 printf("%.20lf",sum);
 return;
}

我的代码输出是:

1.#INF0000000000000000

为什么我得到错误答案?如何正确计算1/(65536*65536)?我期待得到0.00000000023283064365386962890625

感谢您的帮助!

7 个答案:

答案 0 :(得分:5)

有整数溢出。您可以在乘法之前将int转换为double:

sum=1.0/(((double)n)*n);

答案 1 :(得分:1)

n * n对于整数来说太大了。把它翻倍。

答案 2 :(得分:1)

假设你有32位整数n * n导致溢出(4294311936)。 整数范围从

–2,147,483,648 to +2,147,483,647  

您可以尝试将n声明为double n = 65536;

答案 3 :(得分:1)

而不是投射你可以这样做:

double result = 1.0/n/n;

HTH

答案 4 :(得分:0)

似乎两个int变量的乘法溢出,因为65536 * 65536不适合32位。尝试对long longdouble使用mn

答案 5 :(得分:0)

不确定双星**,但您需要使用longlong long类型来保存该大小的整数。

答案 6 :(得分:0)

替换 总和= 1.0 /(N * N); 通过 总和= 1.0 /(双)N /(双)n表示 原因是整数溢出(32位),然后是丢失的强制转换(辅助)。