Mathematica实数保留n位有效数字和保留n位小数的最简单的方法分别是什么?
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只改变数字的显示格式,不会改变数的实际大小。
想知道为什么就往下看。
恭喜你,发现了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只改变数字的显示格式,不会改变数的实际大小。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询