是否有一种标准方法可以检查 64 位浮点数是否可以转换为 32 位而不转换为 +/- Infinity?
我知道之后可以检查它的 +/- Inf。
Convert.ToSingle()
不会这样做。
是否有一种标准方法可以检查 64 位浮点数是否可以转换为 32 位而不转换为 +/- Infinity?
我知道之后可以检查它的 +/- Inf。
Convert.ToSingle()
不会这样做。
为了测试一个double
值是否会在不产生无穷大的情况下d
转换为,您可以测试的绝对值是否严格低于所写的 as (即十六进制)。这个数字是可以转换为浮点数和不能转换为浮点数之间的确切限制。float
d
double
3.4028235677973366e+38
0x1.ffffffp+127
稍微扩展一下,最后一个有限浮点数是:
0x1.fffffep+127 (3.4028234663852886e+38 in decimal)
float
如果 typefloat
有更多的指数位,下一个数字是:
0x2.000000p+127 (3.4028236692093846e+38 in decimal)
与前者相比更接近后者的数字将向下舍入到前者。极限是两个数字的中点:
0x1.ffffffp+127 (3.4028235677973366e+38 in decimal)