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

时间:2015-11-05 14:32:51

标签: floating-point precision floating-accuracy

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

2 个答案:

答案 0 :(得分:5)

假设float在这里意味着IEEE 754单精度,就像它几乎总是那样,INT32_MAX在转换为float时向上舍入到2 31 ,因此,您可以使用以下内容获取与floatint32_t完全相同的最大值。

nextafterf(INT32_MAX, 0)

那是:2147483520

这个数字是低于2 31 的128,与预期该区域的ULP为128一致,因为我们比下面的最大整数高2 7 倍所有整数都可以表示。

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

答案 1 :(得分:0)

解释这个问题的另一种方法是什么是最大/最小的int32_t值,其中加/减1导致的数字恰好比原始数字多1 /小?

由于尾​​数中有23 + 1 = 24位,所以最适合的位数为2 ^ 0 + 2 ^ 1 + ... + 2 ^ 22 + 2 ^ 23或2 ^ 24-1或16777215如果你添加一个,你只需要2 ^ 24或16777216.如果你添加一个到16777216,你仍然会有16777216,因为在浮动格式中,可以加1的最大整数是2 ^ 24-1。 / p>

之后,2 ^ 24到2 ^ 25-2可以增加2.从2 ^ 25到2 ^ 26-4增加4. 2 ^ 26到2 ^ 27-8乘以8等等

负int32_t值的功能类似:从2 ^ 24-1中减去1,得到-2 ^ 24。从-2 ^ 24到-2 ^ 25-2等等。