gpt4 book ai didi

c++ - Float Lowest 和 Max 的数值限制

转载 作者:行者123 更新时间:2023-11-30 03:33:58 44 4
gpt4 key购买 nike

在什么实际情况下,c++ std::numeric_limits<float>::lowest() 等于std::numeric_limits<float>::max()负数

最佳答案

std::numeric_limits<float>::lowest()将等于 std::numeric_limits<float>::max() 的负数如果浮点表示使用 signed magnitude ,因为最大值和最小值将具有相同的有效数字(忽略符号位)和指数,两者都包含它们的最大值。然后符号位将确定数字是正数还是负数,并且不会影响其大小。 (另一个后果是底层表示将能够表示正零和负零。)IEEE 754 使用带符号的幅度表示,因此这是您在实践中最有可能遇到的情况。

但是,另一种表示是使用 two's complement有效数。二进制补码的一个属性是最大负值的幅度大于最大正值,因此对于使用二进制补码有效数的浮点表示,std::numeric_limits<float>::lowest() 不会等于std::numeric_limits<float>::max()的负数. IBM 1130 是使用二进制补码有效数字浮点格式的实际系统示例。 ,大约在 1970 年。

现在,cppreference.com状态:

While it's not true for fundamental C++ floating-poing types, a third-party floating-point type T may exist such that std::numeric_limits<T>::lowest() != -std::numeric_limits<T>::max().

但我不确定该声明的基础是什么,因为 C++11 标准第 18.3.2.4 段仅指定了 lowest()是:

A finite value x such that there is no other finite value y where y < x.

Meaningful for all specializations in which is_bounded != false.

它还在脚注中指出:

lowest() is necessary because not all floating-point representations have a smallest (most negative) value that is the negative of the largest (most positive) finite value.

因此,C++ 实现似乎可以使用二进制补码浮点表示形式,并且有 std::numeric_limits<float>::lowest()。不等于 std::numeric_limits<float>::max() 的负数.

关于c++ - Float Lowest 和 Max 的数值限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42405800/

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