根据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()是一种替代品,但似乎只提到了类型.
在浮点运算中计算两个数字的平均值的最准确方法是什么?让我们考虑一下最常见的双精度 64 位数字。
(a + b) / 2
a / 2 + b / 2
a + (b - a) / 2
这些计算平均值的方法可能会给出不同的结果,如下面的 C++ 代码所示:
double a = 1.2;
double b = 3.6;
double mean1 = (a + b) / 2.0;
double mean2 = a / 2.0 + b / 2.0;
double mean3 = a + (b - a) / 2.0;
cout << fixed << setprecision(20);
cout << "mean1: " << mean1 << endl;
cout << "mean2: " << mean2 …Run Code Online (Sandbox Code Playgroud)