浮点舍入

时间:2012-03-21 19:37:23

标签: c++ floating-point double

我正在用C ++编写代码并将PI定义为:

const double MathConstants::PI = atan(1.0)*4.0;

否则在我的代码中我设置了一个浮点变量:

float result = (float) (-MathConstants::PI / 2.0);

当我在内存中打印结果的值时,我得到DB 0F C9 BF little endian。转换为大端,即BF C9 0F DB。

根据http://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html相当于-1.5707964。

我不明白为什么我得到-1.5707964而不是-1.5707963。 -1.5707963是我期望的结果,因为-PI / 2是-1.5707963267948966。

有人可以在这里启发我吗?

1 个答案:

答案 0 :(得分:4)

舍入是二进制,而不是十进制。当你以十进制查看结果时,它似乎是错误的,因为你希望它绕过最后的十进制数字,但这不是它正在做的事情。它正在舍入最后的二进制位。

我输入1.57079632679489661923132169163975作为PI / 2的常量进入您提供的链接,并给出了正确的输出1.5707964。

将64位表示与32位表示进行比较:

1 .1001001000011111101101010100010001000010110100011000
1 .10010010000111111011011

被切断的部分以1开始,因此正确的舍入需要将32位结果提升。

相关问题