舍入误差
此条目需要扩充。 (2013年3月18日) |
舍入误差(英语:round-off error),是指运算得到的近似值和精确值之间的差异。比如当用有限位数的浮点数来表示实数的时候(理论上存在无限位数的浮点数)就会产生舍入误差。舍入误差是量化误差的一种形式。 如果在一系列运算中的一步或者几步产生了舍入误差,在某些情况下,误差会随着运算次数增加而积累得很大,最终得出没有意义的运算结果。
表示误差
把一个浮点数在计算机中表示,可能会引起误差,这样的误差叫做表示误差。例如:
数学表达式 | 精确值 | 近似值 | 误差 |
---|---|---|---|
1/7 | 0.142 857(OEIS数列A020806) | 0.142 857 | 0.000 000 142 857 |
ln 2 | 0.693 147 180 559 945 309 41... (OEIS数列A002162) | 0.693 147 | 0.000 000 180 559 945 309 41... |
log10 2 | 0.301 029 995 663 981 195 21... (OEIS数列A007524) | 0.3010 | 0.000 029 995 663 981 195 21... |
∛ 2 | 1.259 921 049 894 873 164 76... (OEIS数列A002580) | 1.25992 | 0.000 001 049 894 873 164 76... |
√ 2 | 1.414 213 562 373 095 048 80... (OEIS数列A002193) | 1.41421 | 0.000 003 562 373 095 048 80... |
e | 2.718 281 828 459 045 235 36... (OEIS数列A001113) | 2.718 281 828 459 045 | 0.000 000 000 000 000 235 36... |
π | 3.141 592 653 589 793 238 46... (OEIS数列A000796) | 3.141 592 653 589 793 | 0.000 000 000 000 000 238 46... |
增加数字位数可以减少可能会产生的舍入误差,但是位数是有限的,在表示无限浮点数时仍然会产生误差。在用常规方法表示浮点数的情况下,这种误差是不可避免的,但是可以通过设置警戒位来减小。
多步舍入会增加舍入误差,例如数字9.945309在输入时被舍入到小数点后两位 (9.95),显示时再舍入到小数点后一位 (10.0),舍入误差是0.054691。如果原来的数只经过一步舍入到小数点后一位 (9.9),舍入误差仅为0.045309。
IEEE二进制浮点数算术标准中定义了以下几种舍入规则:
- 朝0方向舍入: 即截尾,直接将需要精确的位数以后的数位舍去。
- 0.142857 ≈ 0.142 (将小数点后第3位以后的数位全部舍去)
- 舍入到最接近: 即四舍五入,结果可能会变大或变小。
- 0.142857 ≈ 0.143 (因小数点后第4位 ,所以小数点后第3位加1)
- 0.142857 ≈ 0.14 (因小数点后第3位 ,所以直接舍去)
- 朝-∞方向舍入: 总是向数轴的左方向舍入。
- 朝+∞方向舍入: 总是向数轴的右方向舍入。
举例
参考文献
- ^ 1.0 1.1 1.2 Weisstein, Eric W. (编). Roundoff Error. at MathWorld--A Wolfram Web Resource. Wolfram Research, Inc. [2010-06-17]. (原始内容存档于2020-11-11) (英语).
- ^ Liam McBrien; Craig McNulty. The Patriot Missile Disaster – What Went Wrong? (pdf). Dr Mark Dunlop, University of Strathclyde. [2010-06-17]. (原始内容存档 (PDF)于2011-07-19).
外部链接
- (英文)MathWorld上关于舍入误差 (页面存档备份,存于互联网档案馆)的解释
- (英文)D. Goldberg. 计算机科学家必备的浮点运算知识 (页面存档备份,存于互联网档案馆)
- (英文)20个著名的软件灾难 (页面存档备份,存于互联网档案馆)