Mathematica 既可以处理确切的数量也可以应对近似数值. 使用
N,您可以任意精度或准确度获得一个确切量的数值近似. 在涉及到任意精度近似数的计算中,
Mathematica 对数值误差的增长进行追踪. 使用高精度数可以得到其它数值系统所无法得到的准确结果.
| Out[206]= |  |
| Out[207]= |  |
在
Mathematica 中,"精度" 实际上指的是有效数字的个数. 您可以用
N 的第二个参数指定结果的精度. 得到一个精度为50的结果:
| Out[208]= |  |
"准确度"实际上指的是小数点后的正确位数. 将

作为
N 的第二个参数给出,可以得到一个准确度为
a 的结果. 其中

表示任意精度. 例如,指定精确度为10:
| Out[91]= |  |
用
Precision 和
Accuracy 可以得到任何数的精度和准确度. 对
N 中结果的精度和准确度进行确定:
| Out[29]= |  |
用

直接输入一个精度为
n 位的数值,用

直接输入一个准确度为
a 位的数值:
| Out[42]= |  |
Mathematica 可以处理确切数值以及两种不同类型的近似数值:利用您计算机上的专用硬件来实现快速运算的机器精度数,和精确到指定位数的任意精度数.
| Out[225]= |  |
用十进位记数法输入的数字通常被解释为机器精度数,具有精度
MachinePrecision:
| Out[106]= |  |
| Out[148]= |  |
机器精度数包含的位数通常略低于16,对应于确切的53比特:
| Out[172]= |  |
任意精度数使用

和

输入. 输入一个10位精度的任意精度数以及一个10位准确度的类似数值:
| Out[4]= |  |
| Out[5]= |  |
指定

的精度为10表示它的准确度为一定值,该值在这里小于10. 差值(
Precision[x]-Accuracy[x])实际上是数值的幅度,由
RealExponent
给出:
| Out[6]= |  |
指定

的准确度为10表示精度为一定值,该值在这里大于10:
| Out[7]= |  |
一个数的准确度可以为负,表示已知的所有正确位数在小数点的左边:
| Out[184]= |  |
MachinePrecision 被认为低于其它任何精度. 原因在于,尽管机器精度数所存放的位数总是略低于16,我们并不知道有多少位数是正确的.
这里,机器精度结果的所有位数都是正确的(使用
InputForm 显示一个近似数的所有非零位):
Out[211]//InputForm= |
| |  |
这里,机器精度结果的所有位数都不正确,原因是相减的两个数用机器精度表示时几乎是完全相等的:
| Out[205]= |  |
为保证
n 个正确位,使用
N
. 得到10个正确位:
| Out[207]= |  |
N 不能给出精度高于其输入值的结果. 这里,不可能用
N 得到精度为100位的结果,原因是输入值仅精确到10位:
| Out[241]= |  |
这里不可能用
N 得到6位精度的结果,原因是输入的是一个机器精度的数,其精度应该小于任何其它精度:
| Out[248]= |  |
如果已知一个近似数
num 比
Precision[num] 的精度高,可以使用
SetPrecision 对其精度进行显式设置. 得到一个对应于机器精度数0.5的任意精度数,其精度为20位:
| Out[246]= |  |
当表达式中包含近似数时,通常不需要使用
N.
Mathematica 会自动计算一个近似结果,并参照输入精度确定结果的精度. 一般地,结果的精度不同于输入中任何部分的精度.
将一个精度为10位的数与一个精度为1000位的数相加:
| Out[286]= |  |
将
Precision 用于最新的输出(

),可以看到
Mathematica 确定的结果具有11位精度:
| Out[287]= |  |
由于机器精度数具有的精度比其它数低,只要输入含有机器精度数,结果通常就是机器精度数.
用

(
Map 的简写形式)将
Precision 应用于涉及到机器精度数的计算列表的每一部分:
| Out[28]= |  |
通常情况下,结果的精度与输入的精度最低部分相差不大:
| Out[296]= |  |
| Out[297]= |  |
在某些情况下,结果的精度可以比输入的精度小. 这往往发生在两个接近相等的近似数相减时:
| Out[5]= |  |
| Out[6]= |  |
当您需要特定精度或准确度的结果时,最好是给出确切的输入并使用
N. 这是因为
N 有时会暂时以高于您要求的精度进行计算,以使获得的结果满足您的指定.
得到

的20位精度的近似值:
| Out[166]= |  |
| Out[167]= |  |