如何理解Precision与Accuracy呢?
mathematica吧
全部回复
仅看楼主
level 1
sss668800 楼主
如题,想了一天都没有理解清楚,按我现在的理解,对于非机器数,Precision是有效数字的个数,而Accuracy是小数点后所有有效位数(包括0与1位估读数),二者关系为Accuracy[x]==Precision[x]-RealExponent[x],
【1】
表的前面两行分别是精确数10与机器数10.0,后面两行分别设定Precision=6与Accuracy=4,我们发现虽然x在小数点后分别显示4个0与3个0,但是Accuracy却是5与4,由此我推测Accuracy包含了未显示的一位数(我称之为估读数),不知道是否准确。
【2】
如果设定小数对应的RealExponent[x]不是整数,则Precision=4或Accuracy=4得到的Accuracy或Precision不再是整数,此时第二行我还能理解,Precision=3.79239<4,因此有效数字显示3位也就是0.620,但是第1行的Accuracy=4.20761怎么理解?明明小数点后只有4个数字6200,前面我还能说Accuracy多出来的一位是估读数,那现在理解多出来的0.20761是估读数么?
【3】
默认精度的理解:如果按照MachinePrecision=15.9546也就是15位理解,为啥下表第一行0.012345678912345678已经17位有效数字了,MachinePrecision还没有爆掉?又为啥显示时,MachinePrecision最后一位是错的?8显示成9。。。
第二行是我设定0.0123456789123456789,发现Accuracy=19,这个也有点难理解,,,
另一个问题是,如果将这个数字限定15位有效数字,是否在参与运算时以0.0123456789123457代入?
2018年01月11日 08点01分 1
level 1
sss668800 楼主
代码1:
numberTypes1 = {10, 10.0, 10.0`6, 10.0``4};
TableForm[
Table[{x, Precision[x], RealExponent[x], Accuracy[x],
Precision[x] == RealExponent[x] + Accuracy[x]}, {x, numberTypes1}],
TableHeadings -> {{}, {"x", "Precision", "RealExponent", "Accuracy",
"equality"}}]
代码2:
numberTypes2 = {0.62`4, 0.62``4};
TableForm[
Table[{x, Precision[x], RealExponent[x], Accuracy[x],
Precision[x] == RealExponent[x] + Accuracy[x]}, {x, numberTypes2}],
TableHeadings -> {{}, {"x", "Precision", "RealExponent", "Accuracy",
"equality"}}]
代码3:
numberTypes3 = {0.012345678912345678, 0.012345678912345678912,
0.0123456789123456789`15};
TableForm[
Table[{x, Precision[x], RealExponent[x], Accuracy[x],
Precision[x] == RealExponent[x] + Accuracy[x]}, {x, numberTypes3}],
TableHeadings -> {{}, {"x", "Precision", "RealExponent", "Accuracy",
"equality"}}]
2018年01月11日 08点01分 2
代码3的numberTypes3改为:numberTypes3 = {0.012345678912345678, 0.0123456789123456789, 0.0123456789123456789`15};其他不变
2018年01月11日 08点01分
level 9
也许你漏了一句话。。。mma里机器精度小于任何精度,或者说mma不保证机器精度任意一位是准确的(比如Tan[N[90Degree]]
至于任意精度运算我的理解是根据所给数的上下限确定结果的上下限以及范围从而确定结果和精度(Accuracy和Precision 指哪个我是记不清了
2018年01月11日 13点01分 3
我现在没时间研究 如果你还没解决的话我这周末研究下
2018年01月11日 14点01分
我现在没时间研究 如果你还没解决的话我这周末研究下
2018年01月11日 14点01分
level 1
自带教程里面有相应说明:
一般地,近似实数的精度(precision)是其在十进制下的计算中作为有效数字的位数. 近似实数的准确度(accuracy)是其在十进制下小数点后边的位数. 请注意,为了在数字处理上达到完全的一致,精度和准确度经常具有与数位的整数数目不相对应的值.
一个近似实数总是在它的值上具有一定的不确定性,这与我们所知之外的数位相关. 我们可以把精度看做是提供了这种不确定性的相对大小的一种测量. 而准确度给出了不确定性绝对大小的测量.
Mathematica 的设置是,如果一个数 x 具有不确定性 \delta,那么它的真实值可以位于大小为 \delta 从 x-\delta/2 到 x+\delta/2 的区间的任意位置. 我们定义一个具有准确度 a 的近似数的不确定性为 10^{-a},而一个具有精度 p 的非零近似数的不确定性为 |x|10^{-p}.

2018年01月15日 06点01分 4
吧务
level 15
精度和准确度里的“坑点”是不少,不过关于你的问题,有两点是我比较肯定的。
1. 数字的显示形式做不了数,也就是说,不必过于纠结某一Accuracy或是Precision下的数显示出的位数似乎和它们的精度与准确度不一致的问题。
2. MachinePrecision得在二进制下考虑。(那个近似16位其实是Log10[2^53])
2018年02月03日 09点02分 5
1