为什么会发生舍入错误?

时间:2020-04-02 23:16:43

标签: rounding-error

谁能解释为什么通常会出现舍入错误?网上的一些解释已经超出了我的脑海,我想知道是否有人有一个容易理解的解释。我在编程时偶尔会遇到这个问题,而我一直为为什么在计算机系统中发生问题而感到困惑。我注意到的一件事是,当使用某些操作(例如:乘法,除法等)对某些数字求值时,就会发生这种情况。

例如,有时数学计算会返回诸如14.000000001或45.99999999之类的数字,而不是预期值(14和46)

整数溢出是由正在使用的编程语言的动作还是计算机系统中的某些潜在因素引起的?

1 个答案:

答案 0 :(得分:1)

通常,计算机会分配固定数量的内存来存储每个数字。由于计算机中的所有内容都使用二进制数字,所以很容易表示出2的幂,而像1/3这样的幂实际上不是。

因此,计算机上的1/3并不是真正的“乘以3等于1的东西”,就像在数学上那样,它更像是0.3333333333(或更接近)。因此,3倍可能是0.99999999而不是1。

例如,如果您想了解更多有关如何实际表示的信息,请查阅C编程语言如何存储浮点数。它有点涉及,但是原理是只分配了一定数量的空间来表示数字,因此不可能实现任意精度。