【发布时间】:2019-05-14 21:30:43
【问题描述】:
考虑以下终止十进制数。
3.1^2 = 9.61
3.1^4 = 92.3521
3.1^8 = 8528.91037441
以下显示 Mathematica 如何处理这些表达式
In[1]:= 3.1^2
Out[1]= 9.61
In[2]:= 3.1^4
Out[2]= 92.352
到目前为止还不错,但是
In[3]:= 3.1^8
Out[3]= 8528.91
没有提供足够的精度。
那么让我们试试精度为 12 的 N[]、NumberForm[] 和 DecimalForm[]
In[4]:= N[3.1^8,12]
Out[4]= 8528.91
In[5]:= NumberForm[3.1^8,12]
Out[5]= 8528.91037441
In[6]:= DecimalForm[3.1^8,12]
Out[6]= 8528.91037441
在这种情况下,DecimalForm[] 和 NumberForm[] 按预期工作,但 N[] 仅提供默认精度 6,即使我要求 12。所以 DecimalForm[] 或 NumberForm[] 似乎是如果您想要输入终止小数时的精确结果,请使用。
接下来考虑具有无限重复小数(如 1/3)的有理数。
In[7]:= N[1/3,20]
Out[7]= 0.33333333333333333333
In[9]:= NumberForm[1/3, 20]
Out[9]=
1/3
In[9]:= DecimalForm[1/3, 20]
Out[9]=
1/3
与前一种情况不同,N[] 似乎是正确的方法,而 NumberForm[] 和 DecimalForm[] 不尊重精度。
最后考虑像 Sqrt[2] 和 Pi 这样的无理数。
In[10]:= N[Sqrt[2],20]
Out[10]= 1.4142135623730950488
In[11]:= NumberForm[Sqrt[2], 20]
Out[11]=
sqrt(2)
In[12]:= DecimalForm[Sqrt[2], 20]
Out[12]=
sqrt(2)
In[13]:= N[π^12,30]
Out[13]= 924269.181523374186222579170358
In[14]:= NumberForm[Pi^12,30]
Out[14]=
π^12
In[15]:= DecimalForm[Pi^12,30]
Out[15]=
π^12
在这些情况下 N[] 有效,但 NumberForm[] 和 DecimalForm[] 无效。但是,请注意 N[] 在 π^13 处切换到科学计数法,即使精度更高。有没有办法避免这种切换?
In[16]:= N[π^13,40]
Out[16]= 2.903677270613283404988596199487803130470*10^6
因此,似乎没有一种一致的方式来制定如何获得具有要求精度的十进制数字,同时避免使用科学记数法。有时 N[] 有效,有时 DecimalForm[] 或 NumberForm[] 有效,有时似乎没有任何效果。
是我遗漏了什么还是系统中存在错误?
【问题讨论】:
标签: decimal wolfram-mathematica precision