此为 Mathematica 4 文档,内容基于更早版本的 Wolfram 语言
查看最新文档(版本11.2)

3.1.6 机器精度数

当一个计算中出现机器精度时,整个计算都是在机器精度下进行的. 其结果也是机器精度数.

当输入包含机器精度时,Mathematica 以机器精度

进行整个计算 Zeta[5.6] 产生机器精度结果,所以N是不恰当的

这里给出高精度的结果

当对任意精度数进行计算时,像前一节讨论的那样, Mathematica 总是保持对结果精度的跟踪,并且只给出已知是正确的、 输入给定的精度的数位. 但是,当对机器精度数进行计算时, Mathematica 总是给出机器精度的结果,不管结果在输入形式下的所有位 是否是正确的.

两个机器精度数相减

其结果具有机器精度

这是结果的所有位

Out[6]//InputForm=

在机器精度数值计算中,用户可能得到错误数位的事实在许多方面令人很不满意. 然而使用固定精度做这些计算的根本原因是计算效率方面的因素.

Mathematica 通常被设置为使用户与所用的计算机系统的细节尽可能地 隔离开来. 但是,在处理机器精度数中,如果 不利用特定计算机 的一些特有的性质,将会丢失太多的精度.

很重要的一点是所有的计算机有特殊的硬件或微码来进行特定的固定精度 的浮点运算. 在进行机器精度的数值运算时,Mathematica 利用这些特点.

一个点型的安排是所有的机器精度数被表示为所用计算机系统中的 "双浮点运算",在大多数现代计算机中,这种数包含 64 个二进制位, 产生 16 个十进制位的尾数.

使用计算机的内部浮点能力的主要优点是速度快. 任意精度的 数值运算,它并不直接利用这些能力,通常比机器精度运算慢许多倍.

使用内部浮点能力有好些缺点,前面已提到的一个是它迫使所有的数 都有固定的精度.

第二个缺点是,机器精度的处理随计算机不同会有所变化. 在机器精度数的 运算中,Mathematica 受特定计算机的浮点算法系统的摆布. 两个计算机的 浮点算法不同,在它们上的机器精度运算得到的结果会有所不同.

特定计算机系统上数的性质

因为在任意特定计算机系统上的机器精度数由一个确切位数的二进制数所代表, 而两个很接近的数有同样的位数类型,所以不能被区分. 参数 $MachineEpsilon 给出 1.0 和与其最接近的数间的距离,该距离有一个独特的二进制表达式.

这里给出所用计算机系统的 $MachineEpsilon 的值

尽管这里显示为 1,Mathematica 知道结果大于 1

减去1给出 $MachineEpsilon

这里再次显示为 1

但在这种情况下,减 1 给出 0,这里因为在该机器精度下,1+$MachineEpsilon/2 与 1 没有差别

机器精度数不仅有受限的精度,也有受限的量值,如果生成一个位于 由 $MinMachineNumber $MaxMachineNumber 所指定的区域外面的数, Mathematica 将自动转换该数成任意精度的形式.

这里所用计算机系统能处理的机器精度数的最大值

Mathematica 自动转换这个运算的结果为任意精度数