可能影响结果——换句话说,算术基本定律可能不再成立!我们将通过一个夸张的例子来说明这一点:一台使用十进制表示的小型计算机,其记录数字的容量仅限于四位数字。在工程中的大规模计算里,这类考虑有时很重要。
考虑一台实数存储容量仅限于四位数字的计算机,每个数字以下列形式记录 $(\pm)10^n(a)$ 其中指数 $n$ 是一个整数, $0.1 \leq a < 1$ 而 $a$ 有四位数字。例如,
$$\pi = +10^1(0.3142)$$
$$-\frac{1}{3} = -10^0(0.3333)$$
5764 = +104 (0.5764)
$$-0.0009713 = -10^{-3}(0.9713)$$
5 764 213 = +107 (0.5764)
加法的执行方式是:首先将较小数的指数调整为与较大数相同,然后将这两个现在具有相同的 10 的乘幂的数相加,最后将结果截断为四位数字。于是 $7.182 + 0.053381$ 变为
+101 (0.7182) + 10−1 (0.5381) = 101 (0.7182) + 101 (0.005 381)
$$= 10^1(0.723581)$$
$$= 10^1(0.7236)$$
当 $a = 31.68$ , $b = -31.54$ 和 $c = 83.21$ 时,两次计算 $(a + b) + c$ 和 $(a + c) + b$ 在这台计算机上会得到不同的结果:
$$(a + b) + c = 83.35, \quad (a + c) + b = 83.34$$
注意上面例子中符号 '=' 的用法。有时它表示“保留 4 位有效数字后等于”。这种计算机算术通常称为浮点算术,所使用的位数通常是预先规定的。
1.5.5 练习题
57 将五个数相加有两种可能的方法:
(((a + b) + c) + d) + e
和
$$(((e + d) + c) + b) + a$$
使用 4 位小数的浮点算术,用两种方法计算和式
$$10^1(0.1000) + 10^1(0.1000) - 10^0(0.5000)$$
$+ 10^0(0.1667) + 10^{-1}(0.4167)$
的结果。解释结果中任何不一致之处。
58 求 $(10^{-2}(0.3251) \times 10^{-5}(0.2011))$ 和 $(10^{-1}(0.2168) \div 10^2(0.3211))$ (使用四位浮点算术)。
59 求当使用四位浮点算术计算
$$10^4(0.1000) + 10^2(0.1234) - 10^4(0.1013)$$