我目前正在更深入地了解使用浮点数时的表示错误。我明白一些小数不能用浮点数精确表示的事实。
令人不安的是,当我编写一个对数字进行多次计算的程序时,错误可能会大到足以导致重大问题。
如果我知道我应用于一组数字的方程式是什么,我如何估计错误有多大以及浮点数是否有足够的问题以使用替代方案?
我确定一定有关于如何做到这一点的文献,但我还没有找到关键字。任何人都可以分享有关确定公式和数据范围会引入多少错误的具体资源吗?
我尝试阅读有关该主题的内容并尝试一些示例,但我无法提取一般方程式或方法。
很难在 Stack overflow 答案中打包 6 个月的大学 数值分析,但 OP 可以开始。
我如何估计误差有多大(?)
一些指南:
什么是error?我们是在寻找absolute
x - expected_x
还是relative (x - expected_x)/expected_x
error? (通常是相对值,除非接近 0.0 - 或 ULP 误差)
首先,了解浮点类型的最后一位单位(ULP)。
将十进制文本与浮点类型相互转换会产生大约 0.5 ULP 错误。
乘法/除法/
sqrt()
倾向于传递大约 0.5 ULP 错误。
加法/减法往往会产生大约 0.5 到 很多 ULP 错误。
三角函数往往会产生一些 ULP 错误。
像
exp()
这样的函数会极大地放大错误:error_y = error_x * exp(x)
.
接近 0.0 和无穷大的边缘情况通常需要特别考虑。
我无法提取一般方程或方法。
过度简化:方差公式.
同时回顾错误和残差。