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

3.1.4 数值精度

正如 1.1.2 节讨论的那样 Mathematica 能处理任意位数的近似实数. 一般, 近似实数的精度 ( ) 是其在十进制下的,在计算中作为有效数字处理的位数. 近似实数的准确度 ( ) 是其在十进制下小数点后边的位数. 因此精度是一个数 的相对误差的度量. 而准确度是绝对误差的度量.

实数的精度和准确度

这是一个近似实数

这里给出该实数的数位的总数

这里给出小数点后边的位数

当使用 N[expr, n] 时,Mathematica 计算表达式  位精度. 只要 用户的输入有足够的精度,Mathematica 都将顺利地得到所要求精度的结果.

这里要求 Pi^25 被计算到 30 位的精度

结果确实有 30 位精度

数值计算

如果使用 N[expr],而并不指明数的精度,那么 Mathematica 将使用机器精度数.

一般,Mathematica 区分两种近似实数,任意精度数和机器精度数. 任意精度数能包含任何位数,其精度在计算中进行调整.

下面的详细讨论表明,机器精度数值直接利用用户的计算机系统的数值能力, 因此计算进行的很快. 但是机器精度数的灵活性比任意精度数差的多.

使用机器精度计算 Pi

在用来生成这个例子的计算机系统上,机器精度是 16 个十进制位

这里给出计算机系统的机器精度

机器精度数

当输入一个近似实数时,Mathematica 必须决定以机器精度还是任意精度处理它. 用户没有指明时,如果输入的数少于 $MachinePrecision 位时, Mathematica 将以机器精度处理该数,否则将以任意精度处理该数.

数的输入形式

Mathematica 打印出数的时候,通常以尽可能容易阅读的形式给出. 但如果用户想取出由 Mathematica 显示出的数,然后在后面作为输入使用, 则需要保证没有信息被丢失.

在标准输出形式下,Mathematica 显示一个数到6位

在输入形式下,Mathematica 显示出它所知道的所有位

Out[10]//InputForm=

这里是一个标准输出形式下的储意精度数

在输入形式中,Mathematica 明确指明数 的精度,并给出额外的数位以确保该数能正确地进行重构

Out[12]//InputForm=

这里使 Mathematica 不明确指出精度

Out[13]//InputForm=

控制显示数的格式

NumberMarks 选项的缺省设置在 InputForm 中和诸如 ToStringOpenWrite 的函数中由 $NumberMarks 给出. 因此通过重新设置 $NumberMarks,能整个改变 InputForm 中被显示的方式.

若缺省地使 Mathematica 在输入形式中包含数记号

甚至一个机器精度数现在也带有明显的数记号

Out[15]//InputForm=

即使不带数记号,InputForm 仍在科学表示法中使用 *^

Out[16]//InputForm=

在进行数值计算中,有时不可避免地会出现所得结果低于用户想要的精度. 特别,当得到的数值结果非常接近 0 时,用户可能很想假定结果是真正的零. 函数 Chop 允许用户用精确的整数 0 代替接近 0 的近似实数.

清除接近0的数

这个运算给出很小的虚部

使用 Chop 可以略去虚部