INT32的第一个和最后一个值是什么,可以用float表示?

Dar*_*aws 0 floating-point precision floating-accuracy

我知道2 ^ 24以上的浮子精度会丢失.我的问题是什么是最后一个int32值,它可以用float精确表示,同时小于INT32_MAX.在同样的原则下,float中具有精确表示的最小int32值是什么?我在谈论单精度浮点格式.谢谢,

Pas*_*uoq 5

假设float在这里是指IEEE 754单精度,因为它几乎总是这样,INT32_MAX四舍五入到2 31时转换为float,这样你就可以得到最大的价值表示的完全一样float,并为int32_t有:

nextafterf(INT32_MAX, 0)
Run Code Online (Sandbox Code Playgroud)

那是:2147483520

这个数字是低于2 31的 128 ,与预期该区域中的ULP将为128一致,因为我们比最大整数高出2 7倍,低于所有最大值可表示.

最小值int32_t也可表示为浮点数为-2 31.