我无法相信我的计划中发生的事情
double den = 180*3600*1000 ;
在调试时得到了这个值-2109934592.0000000
任何帮助请????
你可以尝试这个简单的代码
#include<stdio.h>
#include<math.h>
int main ( int argc , char *argv )
{
double denominator = 10000*180*3600 ;
printf("%f \n", denominator ) ;
return 0 ;
}
答案 0 :(得分:3)
使用问题中的完整代码,我们现在可以看到它是整数溢出。
10000 * 180 * 3600 = 6,480,000,000.
这大于2,147,483,648,这是32位signed int的最大值。乘法的结果溢出到-2,109,934,592,然后转换为double。
要获得正确的结果,请在进行乘法之前将其中一个数字设为double:
10000.0 * 180 * 3600
答案 1 :(得分:1)
test.c: In function ‘main’:
test.c:6:37: warning: integer overflow in expression [-Woverflow]
double denominator = 10000*180*3600 ;
^
编译时出错。你溢出的注意力和铸造成双倍的。
double denominator = 10000.0*180.0*3600.0 ;
解决问题