浮点舍入
Floating point rounding
本文关键字:舍入 更新时间:2023-10-16
我正在用C++编写代码,并将PI定义为:
const double MathConstants::PI = atan(1.0)*4.0;
否则,在我的代码中,我设置了一个浮点变量:
float result = (float) (-MathConstants::PI / 2.0);
当我在内存中打印结果的值时,我得到DB 0F C9 BF little endian。转换为big-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++将浮点指针值舍入为小数位数
- Boost::posix_time::ptime舍入到给定的分钟数
- 浮点定向舍入和优化
- 为什么输出精度没有正确舍入?
- 使用设置精度时如何阻止数字向上舍入?
- 如何在使用 MPFR 时在提升多精度中设置舍入模式
- OpenCV 细分一致的 Rect2f 到 Rect2i 舍入
- C++ 中的舍入函数
- 舍入 QDecDouble 值,精度最多为两个字符
- 将大 int 转换为浮点数,而不舍入 c++
- 舍入错误检测
- 根据浮点符号对浮点进行舍入的最简单方法是什么
- 将整数舍入到另一个整数的最接近的倍数
- Sizeof 舍入到对齐方式,但编译器仍将对象放在剩余的字节中
- 避免将 Int 转换为双重类型转换舍入
- 浮点数学运算后舍入不一致
- 浮动到绳子而无需舍入
- C++长双精度格式而不舍入
- 是否可以为 AVR 编写一个 constexpr 舍入函数?
- Time_T舍入到几分钟