c中三个数字的乘法给出了错误的结果?

时间:2014-10-17 15:12:54

标签: c multiplication

我无法相信我的计划中发生的事情

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 ;
}

2 个答案:

答案 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 ;

解决问题