Jav*_*ner 2 c++ double int unsigned
我试着乘以三个数字,但我得到一个奇怪的结果.为什么我得到如此不同的结果?
unsigned int a = 7;
unsigned int b = 8;
double d1 = -2 * a * b;
double d2 = -2 * (double) a * (double) b;
double d3 = -2 * ( a * b );
// outputs:
// d1 = 4294967184.000000
// d2 = -112.000000
// d3 = 4294967184.000000
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,数字-2将转换为unsigned int.乘法结果为-112,当表示为无符号时为2 ^ 32 - 112 = 4294967184.然后,此结果最终转换double为赋值.
在第二个示例中,所有数学都在双精度数上完成,从而得到正确的结果.如果您这样做,您将获得相同的结果:
double d3 = -2.0 * a * b
Run Code Online (Sandbox Code Playgroud)
作为-2.0是一个double文字.
| 归档时间: |
|
| 查看次数: |
4612 次 |
| 最近记录: |