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

Nab*_*bla 12 c c++ floating-point math.h

难道C和C++标准要求在数学运算math.h上的浮动点(即sqrt,exp,log,sin,...)返回数值最佳的解决方案?

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

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

MSa*_*ers 5

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

  • @chux:[CRlbim](http://lipforge.ens-lyon.fr/www/crlibm/)中提供了具有合理性能的`exp`和`log`的正确舍入实现.`sin`可以在[-π,+π]上正确舍入.IEEE 754建议使用正确的舍入来实现所有这些和其他一些功能(在表9.1中).在委员会中,我反对这一点,因为对于其中一些人来说,没有可行的相关实施(但仍然没有),委员会通过了标准而没有说它们应该被正确地舍入,但是在委员会后的编辑或投票中它被改变了. . (3认同)