c中三个数的相乘给出了错误的结果?
我不能相信了在我的计划c中三个数的相乘给出了错误的结果?
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 ;
}
随着问题的完整代码,我们现在可以看到它是一个整数溢出。
10000 * 180 * 3600 = 6,480,000,000.
这大于2,147,483,648,它是32位带符号整数的最大值。乘法结果溢出至-2,109,934,592,然后转换为double。
为了得到正确的结果让数字双重之一,你在做乘法之前:
10000.0 * 180 * 3600
非常感谢,请耐心等待, – user3466199 2014-10-17 15:35:43
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 ;
修复该问题
如何避免这种情况? – user3466199 2014-10-17 15:22:55
请确保您使用了您所控制的类型,您的原始版本是'double = int',在计算该值后进行转换。 – exussum 2014-10-17 15:26:05
@ user3466199:通过使用现代编译器在发生这种情况时发出警告。 – 2014-10-17 15:26:34
那是不可能的,显示整个代码请。 – simonzack 2014-10-17 15:14:48
显示真实的代码。使用所有警告和调试信息编译('gcc -Wall -g') – 2014-10-17 15:15:00
请检查您的电话号码。我大概100%肯定这些不是正确的数字。 – gnasher729 2014-10-17 15:15:35