Mathematica实数保留n位有效数字和保留n位小数的最简单的方法分别是什么?

2024-12-31 17:47:09
推荐回答(5个)
回答1:

最简单的方法,就是写下 3.1416`3 。

想知道为什么就往下看。

恭喜你,发现了Mathematica(确切地说,这并不是仅限于Mathematica)的数值计算中的一个关键问题。

你的疑惑根源,其实是,N[3.1416, 3] 没有给出你所希望的输出。你觉得它应该会给出3.14,但其实却没有。

这点和3.1416这个数本身的精度大小有关。执行下面的代码:

Precision[3.1416]
(* MachinePrecision *)

MachinePrecision是Mathematica在数值计算时的默认精度,它是一种特殊的精度,采用的是浮点运算,可以获取很快的运算速度。它的数值值是接近16,但是,在进行数值舍入时,它的优先级默认最低,也就是说,不论是多少位数,只要它的精度是MachinePrecision,那么它的精度都会比明确指定出的精度来得低。而N,其实是一种舍入运算而非精度的指定,它是无法由低精度数算出高精度数的。

Pi这样的数,具有无限的精度,所以自然可以用N来舍到三个有效数。

3.1416是MachinePrecision,“精度”最低,所以无法舍到三个有效数。

N[Round[3.1416 100]/100]实质上是先算出来了314/100,这是个准确数,也具有无限精度,所以自然可以舍到3.14。

要直接去指定一个MachinePrecision小数的精度,方法是在这个数的末尾加上“ ` ”再写上你所要的精度。怎么样,很简单吧。

顺便,NumberForm只改变数字的显示格式,不会改变数的实际大小。

回答2:

第一种做法:利用N函数
保留n位有效数字:N[x, n]

保留n位小数:N[x, n+1+Floor[Log10[x]]]
第二种做法:利用NumberForm函数
语法:NumberForm[要显示的数字, {总位数, 小数点后位数}]

回答3:

用NumberForm[N[π],2]

回答4:

NumberForm[3.1416, 3]

回答5:

NumberForm[]之类的都不行,因为这类函数只是改变数字的形式(form),实际并不代表将数字的实际改变
使用SetPrecision[]可以真正地改变数字。
输入 SetPrecision[3.111101, 3] == 3.11
输出 True
说明了SetPrecision的功能