C和C ++标准的数学精度要求

时间:2014-01-06 08:24:33

标签: c++ c floating-point math.h

C和C ++标准是否要求浮点上的math.h中的数学运算(即sqrtexplogsin,... 。)返回数值最佳解决方案?

对于给定的(精确且有效的)输入,通常显然不是这些函数的精确浮点输出。但输出是否需要是最接近数学上精确值的可表示值?

如果没有,是否有任何关于精度的要求(可能是平台特定的/在其他标准中?),以便我能够在我的代码中对计算错误进行最坏情况估计?现代实施的数值误差的典型限制是什么?

1 个答案:

答案 0 :(得分:5)

不,并且有充分的理由。通常,您需要无限精度(和无限时间)来确定精确的数学结果。现在大多数情况下,您只需要几次额外的迭代来确定用于舍入的足够位,但是这个额外位的数量取决于确切的结果(简单地说:当结果接近.5 ULP时)。即使确定所需的额外迭代次数也非常重要。因此,要求精确的结果远比实用的方法慢得多。