根据C++ 11标准[c.math],<cmath>标题与标准C库标题相同<math.h>.
(当然,有几个区别,---命名空间,重载等---但这些可以在这里忽略.)
并且根据C99标准附录F,"定义的实现__STDC_IEC_559__应符合"附件中的规范F.
防爆.在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++ 世界。
| 归档时间: |
|
| 查看次数: |
643 次 |
| 最近记录: |