2017-05-12 177 views
-1

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

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

序列2
步骤1:0.3333333333(高达可能的入口)
步骤2:(步骤1的数目)* 3
回答= 0.9999999999

据我知道,当浮动号码不能被精确地通过计算机中储存的或表示的100%。如果序列1正在产生舍入值,那么为什么不序列2或者是否存在特殊处理1/3,2/3的校验的任何harwired算法?

我已经在移动计算器,Windows计算器应用程序,Microsoft Excel表中试过。所有结果都一样。

+2

因为1/3不同于0.3333333333 ... –

+0

但是我们知道内存的固定大小有限,所以存储.33333会导致一些截断。那么它如何以不同的方式处理 – Bhupendra

+0

你打了多少三分?例如,在一种常见的格式中,您需要大约16个三分之一才能得到与计算1/3相同的近似值。 –

回答

0

许多计算器使用十进制并使用固定数量的数字。例如,如果我们使用七位十进制数字计算1/3,则得到.3333333。这已被舍入到七位数。当我们乘以3时,我们得到.9999999。由于结果是七位数,所以它适合我们的七位数宽度,并且没有舍入。

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

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