我知道2 ^ 24以上的花车精度会丢失。我的问题是什么是最后一个int32值,它可以用float精确表示,同时小于INT32_MAX。在同样的原则下,float中具有精确表示的最小int32值是什么?我在谈论单精度浮点格式。 谢谢,
答案 0 :(得分:5)
假设float
在这里意味着IEEE 754单精度,就像它几乎总是那样,INT32_MAX
在转换为float
时向上舍入到2 31 ,因此,您可以使用以下内容获取与float
和int32_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等等。