来一个学术点讨论-关于Mathematica精度的问题
mathematica吧
全部回复
仅看楼主
吧务
level 11
situxuming 楼主
ArcTan[0,0]返回Indeterminate,这是合理的,毕竟0/0不确定值
而ArcTan[0.,0]返回0,类似的,ArcTan[0,0.]返回Pi/2,可以认为是0.是0的近似值,精度只有15.9546,而0具有无限精度,即无穷大,那么,对于0来说,0. 则不是一个0,自然,0/0.=0,0./0=Infinity,这也是很好理解的。因此,ArcTan[0.,N[0,16]]返回 0 和 ArcTan[N[0,16],0.]返回Pi/2就可以理解了。
那么ArcTan[0.,0.]返回Indeterminate,是因为两个数具有相同精度,彼此看对方都是0,所以就产生0/0的不确定数,这也可以理解。
下面考虑这么一个问题:Mathematica中$MachinePrecision==MachinePrecision 返回时True的,那么照理说ArcTan[N[0,$MachinePrecision],N[0,MachinePrecision]]和ArcTan[N[0,MachinePrecision],N[0,$MachinePrecision]]都应该是返回Indeterminate的,但事实是前一个返回Pi/2,后一个返回0
从结果来看,$MachinePrecision>MachinePrecision,可是,$MachinePrecision==MachinePrecision 又是True的,这个结果怎么解释呢?
@cckinger @mm_酱 @妙谛莲花 @xzcyr 瞧瞧看看
2012年11月21日 11点11分 1
吧务
level 11
situxuming 楼主
@ cckinger @ mm_酱 @ 妙谛莲花 @ xzcyr
果然@不了
2012年11月21日 11点11分 2
吧务
level 11
situxuming 楼主
靠,,,貌似@要用手打。。。
@cckinger
@mm_酱
@妙谛莲花
@xzcyr
2012年11月21日 11点11分 3
吧务
level 15
这题不是Stackexchange上的吗囧,你居然把它译了啊。这个问题当年被提出来的时候我就看到了,但是看着站里那些强人讨论了半天也没得出结论再加上在当时这也不是我很感兴趣的问题,我也就没有细看了……结果这两天这个问题居然又被挖上来了然后你还去答了吗囧。
仔细翻了下帮助,这应该和$MachinePrecision的“特殊性质”有关。下面复制一些帮助:
$MachinePrecision 数值上等于(Equal)MachinePrecision
但是!:
$MachinePrecision 用机器精度分辨度的任意精度计算。
MachinePrecision 用机器精度数计算。
实际上在$MachinePrecision 的更多信息里提及了,$MachinePrecision 的典型值是53Log[10,2],那么让我们来试试:
In[111]:= $MachinePrecision == 53 Log[10, 2]
Out[111]= True
In[113]:= FullSimplify[MachinePrecision == 53 Log[10, 2]]
Out[113]= 53 Log[2] == MachinePrecision Log[10]
至此,应该已经比较清楚了,$MachinePrecision在计算中具有无限精度……
事实上:
NumberForm@N[0, $MachinePrecision](* 0 *)
NumberForm@N[0, MachinePrecision]
(* 0. *)
一个是精确值,一个是近似值,嗯……
2012年11月21日 12点11分 4
其实是StackExchange上有人问了ArcTan[0,0],然后我就从精度这方面去解了答,前面那一大段都是我的回答,但是后面马上就有人提出了ArcTan[N[0,$MachinePrecision],N[0,MachinePrecision]]的问题,去帮助文档查看了这两个函数,也一度怀疑一个精确值,因为也看到了$MachinePrecision=53Log[10,2]
2012年11月21日 12点11分
但是,总对于Mathematica里面$MachinePrecision==MachinePrecision返回True有点耿耿于怀,也暂时还想不明白个中什么细微的区别来,就来这里问问了,没想到,恩,果然大牛不无不在。O(∩_∩)O哈哈~~
2012年11月21日 12点11分
实际上以前对于$MachinePrecision 表示用机器精度分辨度的任意精度计算这一点还是不了解的
2012年11月21日 12点11分
回复 situxuming : 呵呵,我也不是很确定——stackexchange上那位不是指出了一个更本质的理由了吗,实际上只要N里的精度用的不是MachinePrecision,最后N[0,精度]返回的就是 0 。
2012年11月21日 13点11分
level 10
我也写了个回复,不过写完刚要贴上时,校园网抽风了………………次奥…………
2012年11月21日 13点11分 5
level 10
和xzcyr的回复基本一样
2012年11月21日 13点11分 6
level 10
我只能说 受教了[揉脸]
$MachinePrecision在计算中具有无限精度……
实际上只要N里的精度用的不是MachinePrecision,最后N[0,精度]返回的就是 0 。
以前没遇到过精度方面的问题...这下学习了[开心]
2012年11月22日 14点11分 8
精度的问题,是个比较玄妙的问题~搞物理的就更要搞清楚这个精度的问题了
2012年11月22日 14点11分
1