Floating point INT32中第一个和最后一个可以用浮点表示的值是什么?

Floating point INT32中第一个和最后一个可以用浮点表示的值是什么?,floating-point,precision,floating-accuracy,Floating Point,Precision,Floating Accuracy,我知道2^24以上的浮动会失去精度。我的问题是,最后一个可以用浮点表示的int32值是什么,同时小于int32_MAX。根据同样的原则,用浮点表示的最小int32值是什么?我说的是单精度浮点格式。 谢谢,假设这里的float意味着IEEE 754单精度,几乎总是这样,INT32_MAX在转换为float时,四舍五入到231,因此您可以获得最大值,精确表示为float和INT32_t: nextafterf(INT32_MAX, 0) 即:2147483520 这个数字比231低128,这与该区

我知道2^24以上的浮动会失去精度。我的问题是,最后一个可以用浮点表示的int32值是什么,同时小于int32_MAX。根据同样的原则,用浮点表示的最小int32值是什么?我说的是单精度浮点格式。
谢谢,

假设这里的
float
意味着IEEE 754单精度,几乎总是这样,
INT32_MAX
在转换为
float
时,四舍五入到231,因此您可以获得最大值,精确表示为
float
INT32_t

nextafterf(INT32_MAX, 0)
即:2147483520

这个数字比231低128,这与该区域的ULP为128的预期一致,因为我们比最大整数高27倍,在该最大整数下,所有整数都是可表示的


也可表示为浮点的最小
int32_t
值为-231。

假设
float
在这里表示IEEE 754单精度,几乎总是这样,
int32_MAX
在转换为
float
时四舍五入为231,因此,您可以通过以下方法获得可精确表示为
float
int32_t
的最大值:

nextafterf(INT32_MAX, 0)
即:2147483520

这个数字比231低128,这与该区域的ULP为128的预期一致,因为我们比最大整数高27倍,在该最大整数下,所有整数都是可表示的


最小的
int32_t
值也可以表示为浮点值是-231。

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

因为尾数中有23+1=24位,所以适合尾数的最大数字是2^0+2^1++2^22+2^23或2^24-1或16777215。如果你加上一个,你将得到2^24或16777216。如果将一添加到16777216,则仍然会有16777216,因为在浮点格式中,可以增加一的最大整数是2^24-1

之后,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,依此类推。

另一种解释这个问题的方法是什么是最大/最小的int32\t值,其中加/减1得到的数字正好比原始数字多/少1

因为尾数中有23+1=24位,所以适合尾数的最大数字是2^0+2^1++2^22+2^23或2^24-1或16777215。如果你加上一个,你将得到2^24或16777216。如果将一添加到16777216,则仍然会有16777216,因为在浮点格式中,可以增加一的最大整数是2^24-1

之后,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等等。

我指的是(签名的)int32[-2147483648,2147483647]),而不是uint32[0…2^32-1]。因此,我期望值在-2147483648左右,但有一些不同的ULP。我指的是(有符号的)int32[-2147483648,2147483647]),而不是uint32[0…2^32-1]。所以我期望值在-2147483648左右,但有一些差异。