如何检查双精度数是否可以放入浮点数而不转换为无穷大
本文关键字:浮点数 无穷大 转换 何检查 检查 是否 双精度 | 更新日期: 2023-09-27 18:16:27
是否有标准的方法来检查64位浮点数是否可以转换为32位浮点数而不转换为+/-无穷大?
我知道以后可以检查+/- Inf。
Convert.ToSingle()
不会这样做。
为了测试一个double
值d
转换为float
时是否不会产生无穷大,可以测试d
的绝对值是否严格低于写为3.4028235677973366e+38
的double
(即十六进制的0x1.ffffffp+127
)。这个数字是可转换为浮点数和不可转换为浮点数的双精度数之间的确切界限。
扩展一点,最后一个有限浮点数是:
0x1.fffffep+127 (3.4028234663852886e+38 in decimal)
如果类型float
有更多的指数位,下一个float
的数字是:
0x2.000000p+127 (3.4028236692093846e+38 in decimal)
更接近前者而不是后者的数被舍入到前者。极限是两个数的中点:
0x1.ffffffp+127 (3.4028235677973366e+38 in decimal)