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

摘要  介绍(不)停机问题。给了一个算式,当计算机的输出为0时,一般需要提高计算精度继续计算,一直到获得非0值或有效数字。但是,由于事先不清楚算式的准确值是否为0或不为0,因此往往陷入两难境地:如果一直是0,则不知该继续计算还是不计算?若继续计算,万一准确值是0,那么就是无用的计算了;若不计算,那万一准确值不是0,那岂不是没计算出准确值吗?所以,当输出一直是0时,究竟该停机还是不停机?

       给定一个算式。假设在某个精度下,计算机的输出为0. 从计算机的错误计算(二十一)中知,真实值也许不为0. 对此情形,给出一种解决方案:不停增加计算精度直到出现非0结果。

       那么问题来了:计算精度要到多少?只是不停增大吗?如果真的为0,那不是一直也计算不出来?那就停机不用计算了?计算还是不计算呢?停机还是不停机呢?这就是(不)停机问题

       比如,在计算机的错误计算(二十四)中,当有效位数从默认的10位,到13位,再到15位,计算机的输出均是0. 3次计算均为0,您还会增加精度进行计算吗?也许还会。然后第4次计算:增加到16位,可是结果仍然是0. 这时,怎么办?很大概率,您想,肯定是0了。我不计算了。这样就错了。只要再计算一次,就是非0结果了。

       人类的数值计算模式就是固定位数的计算模式(请参考计算机的错误计算(十二))。在计算前,总是假设一个位数,然后所有中间计算与最终结果均保留该位数位数字。对于结果为0的算式的计算,实在是一个挑战。你不知道该不该继续计算。若不停计算,而算式真的为0呢?若到某一个精度不计算了,也许算式真的不为0?不管哪种情形,您的决定均是错的。前者称为遇到不停机问题;后者称为停机问题。总之,不知该停机还是不停机。

       再看一个简单案例。已知

 a=123456+0.1^{2000}-123456,\\ b=123456-123456..

       首先,计算机既不知道它们的关系,也不会预先知道它们的正确结果。其次,若有效位数小于6+2000+1=2007位,则它们的输出相同:均为0. 

       假设要计算 a 的值。当有效位数取10,结果为0;提高计算精度,设有效位数为100,结果仍为0;再设有效位数为200,输出还是0;狠狠心,增大到1000,结果还为0. 到这时,你计算不?继续?再狠狠心,豁出去了,机器的风扇在呼呼地吹,内存几乎爆掉,提高到2000!运行24小时1分后,结果终于出现了:0. 请问,您是否崩溃了?还是舒了一口气?哦,就是0!!!定了,就是0.  不算了。这就是结果了。停机了。

       过了几天,看到另外一个软件(您能举个例子吗?),在上面试了试,哎呀,原来不是0(什么心情?).  以后遇到这种情形,我要不停地算,直到非0结果!

       又过了几天,遇到一个式子,是 b. 当有效位数取10,结果为0;提高计算精度,设有效位数为100,结果仍为0;再设有效位数为200,输出还为0;好吧,既然为0,我要吸取上次教训,不停地算,直到非0结果的出现。然后设置好循环迭代后,机器开启了不停计算模式:风扇在呼呼地吹,内存在不停地与硬盘交换数据,硬盘的可用空间在不停地缩小,终于到公元3000年,停机了!但是,结果还没出来。停机是因为硬盘没可用空间了。这就是不停机问题。

       停机还是不停机?什么时候停机?这是个艰难的决策。

       各位看官,您怎么想?

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 21:20:02       4 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 21:20:02       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 21:20:02       4 阅读
  4. Python语言-面向对象

    2024-07-09 21:20:02       4 阅读

热门阅读

  1. Self-Instruct构造Prompt的例子

    2024-07-09 21:20:02       8 阅读
  2. Oracle-查询表空间使用率很慢

    2024-07-09 21:20:02       8 阅读
  3. git reset HEAD^1

    2024-07-09 21:20:02       8 阅读
  4. 数据的统计探针:SKlearn中的统计分析方法

    2024-07-09 21:20:02       8 阅读
  5. 数据的完美贴合:SKlearn中的数据拟合方法全解

    2024-07-09 21:20:02       8 阅读
  6. Python基础学习笔记(十二)——字典

    2024-07-09 21:20:02       9 阅读
  7. LeetCode 205. 同构字符串

    2024-07-09 21:20:02       8 阅读
  8. GNU/Linux - 什么是loopback设备

    2024-07-09 21:20:02       10 阅读
  9. LeetCode 290. 单词规律

    2024-07-09 21:20:02       6 阅读
  10. Linux应用开发-第四章Linux的多进程开发(1)

    2024-07-09 21:20:02       8 阅读