根据 C++11 标准 [c.math],<cmath>
头文件与标准 C 库头文件相同<math.h>
.
(当然,有几个区别,---命名空间、重载等---但这些在这里可以忽略。)
并根据 C99 标准附录 F,“定义了__STDC_IEC_559__
应符合附录F中的规范。
Ex. The atan2
如果两个参数都为零,则可能会导致域错误,但如果__STDC_IEC_559__
被定义为。
在 C99 中,许多行为还取决于是否__STDC_IEC_559__
已定义或未定义。
然而,似乎__STDC_IEC_559__
C++11 标准中没有提及。
如果是这样,C++ 实现是否应符合附录 F 中的规范?
我觉得std::numeric_limits<T>::is_iec559()
是一个替代品,但它似乎提到了唯一的类型。
C++ 标准 (n3797) 通过引用包含 C 标准库,请参阅 s1.2/2。
ISO/IEC 9899:1999 第 7 条和 ISO/IEC 9899:1999/Cor.1:2001 第 7 条中描述的库
ISO/IEC 9899:1999/Cor.2:2003的第7条以下称为C标准库。
具有第 18 条至第 30 条以及 C.4 中规定的资格,C 标准库是 C++ 标准的子集
图书馆。
该标准没有提及该符号,并且我不希望对其进行定义,因为它似乎特定于标准 C。通过不定义该符号,C++ 不受附录 F 内容的约束。
相反,C++ 标准以更像 C++ 的形式多次提及 IEC 559。例如,
对于所有专业领域均应如此is_iec559 != false
18.3.2.4/56中有具体提及。
静态 constexpr bool is_iec559;
当且仅当类型符合 IEC 559 标准时为真。218
对于所有浮点类型都有意义。
我认为可以公平地说,C++ 包含所有相同的功能(或缺乏这些功能),但适应了 C++ 世界。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)