计算机的错误计算(一百零四)

摘要  计算机的错误计算(二十七)引入了错数概念。本节给出更为严格的证明。

       本节主要讨论表达式计算结果中错误有效数字的数量,简称之为错数。因为0不含有有效数字,因此,除非特别说明,否则,本节假设所有表达式的值均不为0;同时,为了便于描述, 本节所有的数值均使用科学记数法来表示。假设 \tilde{x}=0.s_1s_2...\times10^m 为 x=0.t_1t_2...\times10^m 的一个近似值(不妨假设,它们均为正数。下同),其中 m 为它们的指数,$s_i$ 与 $t_i(i\geq1)$ 分别为它们的有效数字,t_1\neq0, s_1\neq0\,.  若

0.1^{j+1}\leq|\frac{\tilde{x}}{10^m}-\frac{x}{10^m}|<0.1^{j}\,\,\,(j\in\mathbb{N})\,, \quad\quad\quad\quad(1)

则称 {\tilde{x}} 具有 $j$ 位正确有效数字,或 \tilde{x} 与 $x$ 具有 $j$ 位相同有效数字。比如, 与 2 相比较,1.996与2.002均具有3位正确的有效数字;而对于0.12999来说,0.12999001与0.13000002分别是其包含7位与4位相同有效数字的近似值。另外,除非特别说明,否则,本节的运算均没有进位。

       设 x_0\in I\,,  其中 I 是 R 上的一个开区间,\tilde{x}_0\in I 是 x_0 的一个近似值,y=f(x) 在 I上可导,并且 f(x_0)\neq f(\tilde{x}_0)\,.
       设 x_0,\,\tilde{x}_0,\,f(x_0),\,f(\tilde{x}_0) 的值为

\left\{ \begin{array}{ll} x_0=0.t_1t_2...t_kt_{k+1}...\times10^{m_1}, & \\ \tilde{x}_0=0.t_1t_2...t_kt'_{k+1}...\times10^{m_1}, & \end{array} \right. \quad\quad \left\{ \begin{array}{ll} f(x_0)=0.s_1s_2...s_ls_{l+1}...\times10^{m_2}, & \\ f(\tilde{x}_0)=0.s_1s_2...s_ls'_{l+1}...\times10^{m_2}, & \end{array} \right.\quad\quad\quad(2)

其中 t_1\neq0,\, s_1\neq0, \,t_{k+1}\neq t'_{k+1},\, s_{l+1}\neq s'_{l+1}\,.
       定理1.  设

\alpha=|\tilde{x}_0-x_0|\times10^{k-m_1}=|0.t_{k+1}...-0.t'_{k+1}...|\,,\quad\quad\quad(3)

\beta=|f(\tilde{x}_0)-f(x_0)|\times10^{l-m_2}=|0.s_{l+1}...-0.s'_{l+1}...|\,. \quad\quad\quad(4)

若它们的小数点后连续0的个数分别为 n_1 与 n_2\,,  而

\gamma=\frac{|f(\tilde{x}_0)-f(x_0)|}{|\tilde{x}_0-x_0|}=0.d_1d_2...\times10^{m_0}\,\,(d_1\neq0)\,, \quad\quad\quad(5)

(k+n_1)=(l+n_2)+M\,.\quad\quad\quad(6)

其中

M=\big{(}(m_1-m_2)+m_0\big{)} -one\_or\_zero\,,\quad\quad\quad(7)

而 one\_or\_zero\in\{0,1\}\,.

        证明  首先, 由已知条件可得

10^{-n_1-1}\leq\alpha < 10^{-n_1}\,,\quad\quad\quad(8)

10^{-n_2-1}\leq\beta < 10^{-n_2}\,,\quad\quad\quad(9)

10^{m_0-1}\leq\gamma <10^{m_0}\,.\quad\quad\quad(10)

然后, 由(10)与(3)、(4)可知

10^{m_0-1}\leq\frac{\beta\times10^{m_2-l}}{\alpha\times10^{m_1-k}}< 10^{m_0}\,.\quad\quad\quad(11)

10^{m_0-1-(m_2-l)+(m_1-k)}\leq\frac{\beta}{\alpha}< 10^{m_0-(m_2-l)+(m_1-k)}\,.\quad\quad\quad(12)

再通过(8)与(9), 将 \frac{\beta}{\alpha} 放大和缩小:

\left\{ \begin{array}{ll} 10^{m_0-1-(m_2-l)+(m_1-k)}\leq \frac{\beta}{\alpha} < \frac{10^{-n_2}}{10^{-n_1-1}}=10^{-n_2+n_1+1}, & \\ 10^{-n_2-1+n_1}= \frac{10^{-n_2-1}}{10^{-n_1}}< \frac{\beta}{\alpha} < 10^{m_0-(m_2-l)+(m_1-k)}. & \end{array} \right.

这时,由两个不等式的各自左右两项可得

\left\{ \begin{array}{ll} {m_0-1-(m_2-l)+(m_1-k)}<{-n_2+n_1+1}, & \\ {-n_2-1+n_1}<{m_0-(m_2-l)+(m_1-k )} .& \end{array} \right.

\left\{ \begin{array}{ll} (l+n_2)+((m_1-m_2)+m_0)-2<{(k+n_1)}, & \\ (k+n_1)< (l+n_2)+((m_1-m_2)+m_0)+1.& \end{array} \right.

因此,可推得

(l+n_2)+((m_1-m_2)+m_0)-2\,\,\\< \,\,(k+n_1)\,\,\\<\,\, (l+n_2)+((m_1-m_2)+m_0)+1.

由于上述不等式中的每个符号均取整数,因此有

(l+n_2)+((m_1-m_2)+m_0)-1\,\,\\\leq\,\,(k+n_1)\,\,\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad(13)\\\leq\,\, (l+n_2)+((m_1-m_2)+m_0).

从而定理得证。

       根据(1)中相同有效数字定义,显然,k+n_1 为 \tilde{x}_0 与 x_0 相同有效数字个数;而 l+n_2 为 f(\tilde{x}_0) 与 f(x_0) 相同有效数字个数。这样,上述 M 就是 f(\tilde{x}_0) 的错数. 因此, 我们有下面推论:

       推论  若 M>0\,,  则 f(x) 关于 (x_0,\,\tilde{x}_0) 的错数为下列二者之一:

m_1-m_2+m_0\,,\,\,\,m_1-m_2+m_0-1\,.

       上述推论说明, 若 m_1-m_2+m_0>0\,,  则对自变量的一点扰动,就可能导致对应函数值具有 m_1-m_2+m_0 或 m_1-m_2+m_0-1 位错误数字。

参考文献

[1] 赵世忠. 浮点运算错误计算原因. 中国科技论文在线. 2017.  https://www.paper.edu.cn/releasepaper/content/201707-86

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值