gpt4 book ai didi

c++ - C++ 中 float_max + 1 是如何定义的?

转载 作者:行者123 更新时间:2023-12-01 14:07:37 27 4
gpt4 key购买 nike

f 的实际值是多少? ?

float f = std::numeric_limits<float>::max() + 1.0f;

对于无符号整数类型,它被很好地定义为溢出到 0,对于有符号整数,如果我没有错,它是未定义/特定于实现的。
但是它是如何在 float/double 的标准中指定的?是吗 std::numeric_limits<float>::max()还是变成 std::numeric_limits<float>::infinity() ?

在 cppreference 上我目前没有找到规范,可能是我漏掉了。

感谢帮助!

最佳答案

在任何舍入模式下,max + 1将只是 max带有 IEEE-754 单精度浮点数。

请注意,最大正有限 32 位浮点数为:

                  3  2          1         0
1 09876543 21098765432109876543210
S ---E8--- ----------F23----------
Binary: 0 11111110 11111111111111111111111
Hex: 7F7F FFFF
Precision: SP
Sign: Positive
Exponent: 127 (Stored: 254, Bias: 127)
Hex-float: +0x1.fffffep127
Value: +3.4028235e38 (NORMAL)

为了使这个数字溢出并使用默认舍入模式的 round-nearest-ties-to-even 变为无穷大,您必须至少添加:
                  3  2          1         0
1 09876543 21098765432109876543210
S ---E8--- ----------F23----------
Binary: 0 11100110 00000000000000000000000
Hex: 7300 0000
Precision: SP
Sign: Positive
Exponent: 103 (Stored: 230, Bias: 127)
Hex-float: +0x1p103
Value: +1.0141205e31 (NORMAL)

您添加的任何小于此特定值的值都会将其四舍五入到最大值本身。不同的舍入模式可能会产生略有不同的结果,但您要查找的数字的顺序约为 1e31 ,这是相当大的。

这是一个很好的例子,说明 IEEE 浮点数如何随着其数量的增加而变得越来越稀疏。

关于c++ - C++ 中 float_max + 1 是如何定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61918158/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com