C和C ++标准的数学precision要求 [英] Math precision requirements of C and C++ standard

查看:165
本文介绍了C和C ++标准的数学precision要求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

不要C和C ++标准要求文件math.h 浮动点数学运算(即开方 EXP 日志,...)来返回数值最佳的解决方案?

Do the C and C++ standards require the math operations in math.h on floating points (i.e. sqrt, exp, log, sin, ...) to return numerically best solution?

对于给定的(准确和有效)输入有能够明显,一般不会从这些函数的输出精确的浮点。但是重新presentable值所需最靠近数学上精确一个输出

For a given (exact and valid) input there can obviously in general not be an exact floating point output from these functions. But is the output required to be the representable value nearest to the mathematically exact one?

如果不是,是否有在precision任何(可能/其他标准?特定于平台)的任何要求,让我能够使计算误差的最坏情况估计在我的code?什么是现代实现的数值误差典型的限制?

If not, are there any requirements on precision whatsoever (possibly platform-specific / in other standards ?), so that I am able to make worst-case estimates of calculation errors in my code? What are typical limits on numerical errors of modern implementations?

推荐答案

没有,有很好的理由。一般来说,你需要一个无限precision(和无限的时间),以确定确切的数学结果。现在,大部分的时间,你只需要一些额外的迭代来确定四舍五入足够位,但这个数字额外的比特取决于具体结果(简单地说:当结果接近.5 ULP)。即使确定所需的迭代的额外数量是高度非平凡的。因此,需要精确的结果远远比一个务实的做法慢得多。

No, and for good reason. In general, you'd need an infinite precision (and infinite time) to determine the exact mathematical result. Now most of the times you need only a few extra iterations to determine sufficient bits for rounding, but this number of extra bits depend on the exact result (simply put: when the result is close to .5 ULP). Even determining the extra number of iterations required is highly non-trivial. As a result, requiring exact results is far, far slower than a pragmatic approach.

这篇关于C和C ++标准的数学precision要求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆