c++ - 浮点舍入

标签 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 小尾数法。转换为大端字节序,即 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.57079632679489661923132169163975 作为 PI/2 的常量,它给出了正确的输出 1.5707964。

比较 64 位表示与 32 位表示:

1 .1001001000011111101101010100010001000010110100011000
1 .10010010000111111011011

被截断的部分从 1 开始,因此适当的舍入需要将 32 位结果向上提升。

关于c++ - 浮点舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9811644/

相关文章:

c++ - 如何使用 Windows 凭据通过 C++ 使用 OCI 自动登录到 oracle?

c - 如何在 C99 中获取带符号的 float 零?

C++ 函数返回 'inf' 而不是 double

c++ - Visual Studio C++ 位域结构大小问题

c++ - 汇编程序和 C++ 输出文本

java - 如何检测何时在触摸设备上显示键盘?

Python - 如何为 Decimal.quantize 定义舍入比例

c++ - 比较两个 double 的正负

c - 带有双格式问题的 Printf

java - 使用 double 类型对对象数组列表的数组列表进行排序