计算机的错误计算(二十七)

摘要  介绍错数:任给一个单变元函数,当自变量被截断时,函数值中含有的错误的有效数字个数,并给出其计算方法。

       首先,从字面上看,错数表示错误的有效数字个数。

       下面从一个略显粗糙的化简过程,推出错数的计算方法。

       众所周知,导数是函数的变化量与自变量的变化量的比值的极限:

f^{\prime}(x_0)=\lim\limits_{\Delta x\to0}\frac{f(x_0+\Delta x)-f(x_0)}{\Delta x} .

如果 \Delta x 比较小,那么函数值的变化量约等于导数与自变量的变化量的乘积:

f(x_0+\Delta x)-f(x_0)\approx f^{\prime}(x_0)\Delta x\,. \quad\quad (1)

       不妨用科学记数法表示它们(这里稍作修改:小数点前为0, t_i 、 s_i 及 d_i 均为 0\sim9 的数字,并且  t_1 、 s_1 及 d_1 均不为0):

 \,\,\,\,\,\,\,\,x_0= 0.t_1t_2t_3...\times10^{m_1},\\ \,\,\,\,\,\,\,\,\,f(x_0)=0.s_1s_2s_3...\times10^{m_2},\\ f^{\prime}(x_0)=0.d_1d_2d_3...\times10^{m}.

       假设自变量与函数值均保留 n位有效数字,并且自变量与函数值中分别有 k 位与 j 位错误数字。这时,有

|\Delta x|\\ \approx |0.t_1t_2t_3...t_{n-k}t _{n-k+1}...t_{n}\times10^{m_1}\\- 0.t_1t_2t_3...t_{n-k}\underbrace{t'_{n-k+1}...t'_{n}}_{k \textup{ incorrect digits}}\times10^{m_1}|\\\approx|0.\underbrace{000...0}_{n-k\textup{\textup{} zeros}}t''...\times10^{m_1}|\\=|0.t''...\times10^{m_1-n+k}|.

其中 t_{n-k+1}\neq t'_{n-k+1}t''\neq 0.  上式意味着 \Delta x 有 m_1-n+k 位整数。

同理可得,f(x_0+\Delta x)-f(x_0) 有 m_2-n+j 位整数。另外,f^{\prime}(x_0) 有 m 位整数。因此,由 (1) 可得

(m_2-n+j)\approx m+ (m_1-n+k)

j-k\approx m+m_1-m_2.

上式表示,函数值的错误数字个数比自变量的错误数字个数多 m+m_1-m_2 位。

       若自变量被截断了,只有 n位正确数字。这时,k=0. 那么,函数值中含有 

j\approx 0+(m+m_1-m_2)=m+m_1-m_2

位错误数字。

       以上就是错数的计算方法。

       还记得计算机的错误计算(七)中内容吗:“对于exp(x) 函数来说,若 x 有表示误差,并有 k 位整数,则计算机有时会产生约 k 位错误数字”(注:这里的 k 不是 上面的 k)。

       设 x=65*\ln(20)\approx 0.1947225977810094 \,e\, 3.  则 x有 3位整数,即 m_1=3.  而对于函数 exp(x) 来说,其导数也为 exp(x)。因此在很小的邻域内,m=m_2.  所以,错数为 m+m_1-m_2=m_1. 

       这就是为什么 exp(x) 的错数为 x 的整数位数的原因。这也就是软件关于 exp(x) 的输出总是有 几位数字出错的原因。

       最后,利用错数的计算公式,您不妨分析一下其它函数? 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值