首页 > 其他分享 >计算机的错误计算(二十)

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

时间:2024-07-05 20:57:38浏览次数:19  
标签:13 计算机 16 有效数字 二十 错误计算 减数

摘要  解释 计算机的错误计算(十九)中展示的 20^{65}-e^{65\times\ln(20)} \approx 6e70 \,  的错误计算原因。

       计算机的错误计算(十九)讨论了计算机的错误计算:20^{65}-e^{65\times\ln(20)} \approx 6e70 \,.

       下面介绍其出错原因。

       首先,若单独计算 20^{65},则 Python 采用的是高精度计算,其计算结果是准确的;在后面参与相减运算时,又会将其截断成 53 位的双精度数。因此,其值为:

20^{65}\\= 0.36893488147419103232e85 \\\approx 0.\textcolor{red}{368934881474191029401867593372}...e85.

其次,由于 \ln(20) 有 16位正确有效数字(四舍五入后),因此 65\times\ln(20) 也仅有 16位正确数字;再次,因为 65\times\ln(20)  有 3位整数,所以 e^{65\times\ln(20)} 只有 16-3=13 位正确有效数字(可参考计算机的错误计算(七))。于是,减数的计算过程如下:

e^{65\times\ln(20)} \\\approx\exp(65\times0.\underbrace{2995732273553990}_{\textup{Only}\,\,16\,\,\textup{digits}\,\,\textup{correct.}}85425347038835...e1) \\ \approx \exp(0.\underbrace{1947225977810093}_{\textup{Only}\,\,16\,\,\textup{digits}\,\,\textup{correct.}}97976959007792...e3)\\ \approx 0.\underbrace{\textcolor{blue}{3689348814741}}_{\textup{13 correct digits left.}}\textcolor{blue}{84904101984816747}...e85.

最后,被减数与减数均有 85位整数,其中前 13位相同,第 14位不同,这样就导致差大约有 85-13=72 位整数(实际是 71位)。相减过程如下:

0.\textcolor{red}{368934881474191029401867593372}...e85\\- 0.\underbrace{\textcolor{blue}{3689348814741}}_{\textup{13 correct digits left.}}\textcolor{blue}{84904101984816747}...e85\\= 0.\underbrace{00000000000000}_{\textup{14 zeros}}6125299882776625...e85\\\approx 6.125299882776625e70.

       上面过程完美地诠释了 Python 的错误计算过程。

       另外,由于上述计算包含了 5个运算,因此只要其中 3个软件在实现上存在微小的不一致性(例如,舍入误差不同),就有可能导致最终结果不完全一致。具体细节不再赘述。

       最后,总结一下:纵观整个过程,错误结果主要是由 exp(x) 函数计算错误所引起。

标签:13,计算机,16,有效数字,二十,错误计算,减数
From: https://blog.csdn.net/zaim1/article/details/140149712

相关文章