Floating point 什么';s最负的32位浮点数的精确值?

Floating point 什么';s最负的32位浮点数的精确值?,floating-point,min,ieee-754,Floating Point,Min,Ieee 754,我想知道是否存在最负的32位浮点值的精确值(根据IEEE-754标准) 我在两个浮点TIFF文件中看到了两个像素值,显然是针对最负的32位float: -3.4028230607370965E38 -3.4028234663852886E38 哪个是正确的?(或者,是特定于语言/平台的值。) 我搜索了谷歌,大部分时间都得到了-3.4E38,这是近似值。这个答案假设float格式实际上是IEEE 754 binary32,如果在TIFF等文件格式的上下文中使用,肯定会是这样。如果某个体系结构在内

我想知道是否存在最负的32位浮点值的精确值(根据IEEE-754标准)

我在两个浮点TIFF文件中看到了两个像素值,显然是针对最负的32位
float

-3.4028230607370965E38
-3.4028234663852886E38
哪个是正确的?(或者,是特定于语言/平台的值。)


我搜索了谷歌,大部分时间都得到了
-3.4E38
,这是近似值。

这个答案假设
float
格式实际上是IEEE 754 binary32,如果在TIFF等文件格式的上下文中使用,肯定会是这样。如果某个体系结构在内部使用非IEEE 754浮点,则该体系结构负责处理TIFF图像中的IEEE 754二进制32号

最负浮点数的精确值为-0x1.fffffep127。用十进制写有点不舒服,因为它需要大量的数字,所以人们通常写几个十进制近似值中的一个,当转换成
float
时,产生这个数字。您问题中的两个值都不是-0x1.fffffep127的精确值

请注意“-3.4E38”不是一个近似值,当转换为浮点值时,会产生最负的浮点值。这只是一个粗略的估计

当以十进制形式写入时,最负浮点的精确值为:

-3.4028234663852885981170418348451692544e+38

你问题中的第一个值,作为最负的
浮点值的候选者,非常奇怪,因为写它的人都会费心去写错误的数字,事实上,它不会舍入到最负的浮点值:

#包括
#包括
#包括
int main(){
printf(“%.38e\n”,-FLT_MAX);
printf(“%.38e\n”,-0x1.fffff ep127);
printf(“%.38e\n”,-3.4028230607370965E38f);
printf(“%.38e\n\n”,-3.4028234663852886E38f);
printf(“%a\n”,-3.4028230607370965E38f);
}
制作:

-3.40282346638528859811704183484516925440e+38 -3.40282346638528859811704183484516925440e+38 -3.40282306073709652508363335590014353408e+38 -3.40282346638528859811704183484516925440e+38 -0x1.fffffap+127 -3.40282346638528859811704183484516925440e+38 -3.40282346638528859811704183484516925440e+38 -3.40282306073709655083335590014353408E+38 -3.40282346638528859811704183484516925440e+38 -0x1.FFFFF AP+127 上述程序需要一个
printf
函数,当将
double
转换为十进制时,该函数可以正确打印所有数字。如果这不是你所拥有的,程序可能会产生不同的结果,但仍然应该显示在你的问题中有一个比第一个浮点更负的浮点


它表明您问题中的第二个值是最负浮点的十进制近似值(当使用
f
后缀解析时,它舍入为相同的值),而第一个值是最负浮点的2(-0x1.FFFFF CP+127是最负浮点的一个ULP,-0x1.FFFFF AP+127是两个ULP。单精度
float
格式中只有23个显式有效位,23不是4的倍数,因此不使用6位十六进制表示法中的最后一位).

此答案假设
浮点格式实际上是IEEE 754 binary32,如果在文件格式(如TIFF)的上下文中使用,则肯定是这样。如果架构内部使用非IEEE 754浮点,则该架构负责处理TIFF图像中的IEEE 754 binary32数字

最负浮点数的精确值为-0x1.fffffep127。由于需要大量的数字,所以用十进制写有点不舒服,因此人们通常会写几个十进制近似值中的一个,当转换为
浮点时,会产生这个数。您所问的两个值都不是是-0x1.fffffep127的精确值

请注意“-3.4E38”不是一个近似值,当转换为float时,会产生最负的float。它只是一个粗略的估计

当以十进制形式写入时,最负浮点的精确值为:

-3.4028234663852885981170418348451692544e+38

你问题中的第一个值,作为最负的
浮点值的候选者,非常奇怪,因为写它的人都会费心去写错误的数字,事实上,它不会舍入到最负的浮点值:

#包括
#包括
#包括
int main(){
printf(“%.38e\n”,-FLT_MAX);
printf(“%.38e\n”,-0x1.fffff ep127);
printf(“%.38e\n”,-3.4028230607370965E38f);
printf(“%.38e\n\n”,-3.4028234663852886E38f);
printf(“%a\n”,-3.4028230607370965E38f);
}
制作:

-3.40282346638528859811704183484516925440e+38 -3.40282346638528859811704183484516925440e+38 -3.40282306073709652508363335590014353408e+38 -3.40282346638528859811704183484516925440e+38 -0x1.fffffap+127 -3.40282346638528859811704183484516925440e+38 -3.40282346638528859811704183484516925440e+38 -3.40282306073709655083335590014353408E+38 -3.40282346638528859811704183484516925440e+38 -0x1.FFFFF AP+127 上述程序需要一个
printf
函数,当将
double
转换为十进制时,该函数可以正确打印所有数字。如果不是这样,程序可能会产生不同的结果,但仍应显示问题中的浮点值比第一个浮点值更负

它表明您问题中的第二个值是最负浮点的十进制近似值(当使用
f
后缀解析时,它舍入为相同的值),而第一个值是最负浮点的2(-0x1.FFFFF CP+127是最负浮点的一个ULP,-0x1.FFFFF AP+127是两个ULP。单精度
float
格式中只有23个显式有效位,23不是4的倍数,因此不使用6位十六进制表示法中的最后一位)