机器精度数

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

当输入包含机器精度时,Mathematica 以机器精度进行整个计算.
In[1]:=
Click for copyable input
Out[1]=
Zeta[5.6] 产生机器精度结果,所以 N 是不恰当的.
In[2]:=
Click for copyable input
Out[2]=
这里给出高精度的结果.
In[3]:=
Click for copyable input
Out[3]=

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

两个机器精度数相减.
In[4]:=
Click for copyable input
Out[4]=
其结果具有机器精度.
In[5]:=
Click for copyable input
Out[5]=
这是结果的所有位.
In[6]:=
Click for copyable input
Out[6]//InputForm=

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

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

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

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

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

使用内部浮点能力有好些缺点. 前面已提到的一个是它迫使所有的数都有固定的精度,与对它们而言什么精度是合理的无关.

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

$MachinePrecision十进制精度位数
$MachineEpsilon机器精度数的最小正数,1.0加上该数给出的结果与1.0是可区分的
$MaxMachineNumber机器精度数的最大值
$MinMachineNumber机器精度中的最小正值
$MaxNumber任意精度数的最大值
$MinNumber正的任意精度数的最小值

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

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

这里给出所用计算机系统的 $MachineEpsilon 的值.
In[7]:=
Click for copyable input
Out[7]=
尽管这里显示为 Mathematica 知道结果大于1.
In[8]:=
Click for copyable input
Out[8]=
InputForm 表明结果不是确切的1.
In[9]:=
Click for copyable input
Out[9]//InputForm=
减去1给出 $MachineEpsilon.
In[10]:=
Click for copyable input
Out[10]=
这里再次显示为 .
In[11]:=
Click for copyable input
Out[11]=
但在这种情况下,咋机器精度下,结果与 没有差别.
In[12]:=
Click for copyable input
Out[12]//InputForm=
减1给出0.
In[13]:=
Click for copyable input
Out[13]=

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

这里所用计算机系统能处理的机器精度数的最大值.
In[14]:=
Click for copyable input
Out[14]=
Mathematica 自动转换任何大于 $MaxMachineNumber 的结果为任意精度数.
In[15]:=
Click for copyable input
Out[15]=
这是另一个计算,其结果在机器精度数的范围之外.
In[16]:=
Click for copyable input
Out[16]=
New to Mathematica? Find your learning path »
Have a question? Ask support »