gpt4 book ai didi

c++ - 浮点舍入

转载 作者:搜寻专家 更新时间:2023-10-31 01:15:42 28 4
gpt4 key购买 nike

我正在用 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.57079632679489661923132169163975 作为 PI/2 的常量,它给出了正确的输出 1.5707964。

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

1 .1001001000011111101101010100010001000010110100011000
1 .10010010000111111011011

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

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com