【发布时间】:2012-03-21 19:37:22
【问题描述】:
我正在用 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。
有人可以在这里启发我吗?
【问题讨论】:
-
别忘了浮点数通常是二进制的……不是十进制的。
-
我们必须检查多少次浮点值固有的不准确性?这似乎已经在 StackOverflow 上被讨论死了。
-
@dreamlax,只要人们有 10 根手指,我们就会继续收到这些问题。至少这个与大多数其他的有点不同。
-
您决定使用 pi/2 的浮点表示。现在你有 1.5707964 个问题。
标签: c++ floating-point double