在计算机中浮动计算

时间:2017-05-12 15:05:14

标签: floating-point hardware

有人可以解释一下,如何在两个操作序列下产生不同的结果在计算机/硬件/计算器中?

序列1
第1步:1/3
步骤2 :(步骤1的结果)* 3
答案= 1

序列2
第1步:.3333333333(可能进入)
步骤2 :(步骤1的数量)* 3
答案= .9999999999

据我所知,浮动号码无法通过计算机100%精确存储或表示。如果序列1产生舍入值,那么为什么不是序列2。 或者是否有任何有用的算法可以检查1/3,2/3是否需要特别处理?

我在移动计算器,Windows计算器应用程序,Microsoft Excel工作表中试过这个。都给出了相同的结果。

1 个答案:

答案 0 :(得分:0)

许多计算器使用十进制并使用固定数字的数字。例如,如果我们使用七位小数计算1/3,我们得到.3333333。这已经向下舍入到七位数。当我们乘以3时,得到.9999999。由于结果为七位数,因此它符合我们的七位宽度,并且没有四舍五入。

算术的许多计算机实现使用二进制并且还使用固定数量的数字。例如,如果我们使用七位二进制数字计算1/3,我们得到.0101011。这也已经四舍五入以适应我们的七位数,并且它被四舍五入,因为我们必须舍入的分数在我们四舍五入的位置处超过1/2。当我们乘以3时,确切的答案是1.0000001。这有8个数字,所以我们把它四舍五入到数字,产生1.000000。 (在这种情况下,我们舍入的点的分数正好是1/2,规则是舍入的,所以下一个数字是偶数,所以我们向下舍入为0。)

我只是为这些例子使用了七位数字。通常,计算机浮点运算使用53个二进制数字作为小数部分(对于double类型,24对于float)。计算器使用的小数位数会有所不同,但通常超过七位。