浮动最低和最高

问题描述:

在数字界线什么是真正的情况下,不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确实状态:

虽然它不是根本ç真正++浮动Poing的类型,一第三方浮点类型T可能存在,例如std::numeric_limits<T>::lowest() != -std::numeric_limits<T>::max()

但我不知道这种说法的依据是什么,因为C++ 11标准,段落18.3.2.4,仅仅规定了lowest()是:

有限值x这样没有其他有限值y其中y < x

有意义的所有专业is_bounded != false

它也注意到在脚注:

lowest()是必要的,因为不是所有的浮点表示有一个最小的(最负)值是 负最大(最正)有限值。

所以它似乎是一个补浮点表示可以由C++实现使用,这将有std::numeric_limits<float>::lowest()不等于std::numeric_limits<float>::max()负。