c - c中三个数相乘会得到错误的结果吗?

标签 c multiplication

我不敢相信我的程序中发生了什么

double den = 180*3600*10000 ;

在调试中得到了这个值-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.

这大于 32 位有符号整数的最大值 2,147,483,648。乘法结果溢出到-2,109,934,592,然后转换为double。

要获得正确的结果,请在进行乘法之前将其中一个数字加倍:

10000.0 * 180 * 3600

关于c - c中三个数相乘会得到错误的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26428107/

相关文章:

vhdl - 在 VHDL 中实现方程

r - 如何快速执行类似乘法的矩阵运算?

c - 为什么函数声明在源文件的顶部附近?

当一项变化时计算表达式的变化(多线程)

c - 删除特定注册表项下的所有值

fft - 从复数 FFT 到有限场 FFT 的转换

c - 两个长数相乘

c++ - 取负值时 "x = -x"和 "x *= -1"之间是否存在功能差异?

通过 C 更改文本文件名

Cygwin C 程序不接受命令行参数