根据C ++ 11标准[c.math],<cmath>
标题与标准C库标题<math.h>
相同。
(当然,有几个区别,---命名空间,重载等---但这些可以在这里忽略。)
根据C99标准附件F,“定义__STDC_IEC_559__
的实施应符合”附件F中的规范。
实施例。如果两个参数都为零,则atan2
可能会导致域错误,但如果定义了__STDC_IEC_559__
,则不能导致域错误。
在C99中,许多行为还取决于是否定义__STDC_IEC_559__
。
但是,在C ++ 11标准中似乎没有提到__STDC_IEC_559__
如果是这样,C ++实现是否符合附件F中的规范?
我认为std::numeric_limits<T>::is_iec559()
是替代品,但似乎只提到了类型。
答案 0 :(得分:4)
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中有具体提及。
static constexpr bool is_iec559;
当且仅当类型符合IEC 559标准时才为真.218
对所有浮点类型都有意义。
我认为可以公平地说C ++包含所有相同的功能(或缺少它们),但适应C ++世界。