计算机的错误计算(一)

       众所周知,计算难免会有误差。比如,购物结算时可能会有一点点误差。对于这一点点误差,大家都会接受。但是,当误差变成错误时,大家还会接受吗?
       下面是计算机的一些错误计算。

例1. 计算

             f(a,b)=333.75\, b^6+a^2\,(11\,a^2b^2-b^6-121\,b^4-2) +5.5\,b^8+\frac{a}{2\,b}, 

其中 a = 77617.0, b=33096.0(注:上式由德国学者 Rump S 给出)。

       若使用由 c 语言编制的程序计算上式的值,则不同的精度, 或不同的环境下, 会得到完全不一致的结果。       
       在IBM 370 计算机的单精度、双精度、扩展精度下计算结果分别是

                       1.172603,

                       1.1726039400 531,

                       1.172603940053178;

在Pentium 4 工作站(GCC, Linux)上, 3 个不同类型下的计算结果依次为

                       2.0317\times10^{29},

                       5.960604\times10^{20},

                       -9.38724\times10^{-323};

在Sun机器上(Fortran程序)计算, 32位、64位、128位精度下的结果分别为
                       -6.338253\times10^{29},

                       -1.1805916207174113\times10^{21},

                       1.1726039400531786318588349045201838

       也许大家会说,这是远古时期的计算机了吧?是的。年代确实早了一点。但是, 很遗憾地告诉大家,即使是现今的计算机,输出也一样。大家不妨在Visual Studio 或GCC下算一下。结果就不说了。因为,环境不一样,错的也不一样。这正应了托尔斯泰老人家的那句话:“不同的环境输出不一样的结果(不幸的家庭各有各的不幸)”。

       最后差点忘了说正确答案:-0.8273960599...。所以,上述计算均是错误的。

例2. 能从Matlab的计算结果获得(e^{\pi\sqrt{163}}-262537412640768744)  1 位正确的有效数字吗?

      若在Matlab 中输入 >> exp(pi*sqrt(163))-262537412640768744,则结果是-480。事实上, 上式的值应该是-7.499274028...\times10^{-13}。 所以,从Matlab得不到 1位正确数字。

     上述两个错误案例是偶然的吗?仅有的吗?不是的。能随便产生一个计算机会算错的案例吗?答案是:

     请进入 不可信计算 网址,输入 123,点击 产生 按钮,会输出,比如(我现在是这个)

954800\times123^{12}-117440400\times123^{11}-81\times123^2+1225607.14

用C++或Java或其它语言,编程试试。99.99%是错误结果。

      更广泛的案例请查看《悬赏万元,用大模型等做算术》。从该悬赏的部分反馈可看出,好多软硬件的计算均会出现错误。

      最后总结一句:错误是系统性的,影响范围是广泛的。

例1~2 中内容或涉及的文献请参考:

      [1] 赵世忠. 算术表达式的一种可信计算算法及其软件ISReal. 中国科学F辑: 信息科学, 2016, 46(6): 698-713 

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值