Wolfram mathematica 浮点数的基本输入形式?
我刚刚发现了浮点数的两种输入形式之间的根本区别:Wolfram mathematica 浮点数的基本输入形式?,wolfram-mathematica,Wolfram Mathematica,我刚刚发现了浮点数的两种输入形式之间的根本区别: In[8]:= 1.5*^-334355//Hold//FullForm 1.5*10^-334355//Hold//FullForm Out[8]//FullForm= Hold[1.5000000000000000000000000000000001`15.954589770191005*^-334355] Out[9]//FullForm= Hold[Times[1.5`,Power[10,-334355]]] 这两种形式在内存和时间消耗
In[8]:= 1.5*^-334355//Hold//FullForm
1.5*10^-334355//Hold//FullForm
Out[8]//FullForm= Hold[1.5000000000000000000000000000000001`15.954589770191005*^-334355]
Out[9]//FullForm= Hold[Times[1.5`,Power[10,-334355]]]
这两种形式在内存和时间消耗方面有很大不同:
In[7]:= start = MaxMemoryUsed[];
1.5*^-33432242 // Timing
start = MaxMemoryUsed[] - start
1.5*10^-33432242 // Timing
MaxMemoryUsed[] - start
Out[8]= {1.67401*10^-16, 1.500000000000000*10^-33432242}
Out[9]= 0
Out[10]= {7.741, 1.500000000000000*10^-33432242}
Out[11]= 34274192
但是我找不到表单*^的记录位置。它真的是浮点数的基本输入形式吗?其他基数的数字如何
为什么第二种形式如此昂贵?关于时间和内存消耗——这些都是评估的结果,与不同的形式无关。当10显式存在时,使用整数运算求10的幂,因此时间/内存效率低下。当我们从一开始就使用机器精度时,效果消失:
In[1]:= MaxMemoryUsed[]
1.5*^-33432242 // Timing
MaxMemoryUsed[]
1.5*10.^-33432242 // Timing
MaxMemoryUsed[]
Out[1]= 17417696
Out[2]= {0., 1.500000000000000*10^-33432242}
Out[3]= 17417696
Out[4]= {0., 1.500000000043239*10^-33432242}
Out[5]= 17417696
关于时间和内存消耗-这些都是评估的结果,与不同的形式无关。当10显式存在时,使用整数运算求10的幂,因此时间/内存效率低下。当我们从一开始就使用机器精度时,效果消失:
In[1]:= MaxMemoryUsed[]
1.5*^-33432242 // Timing
MaxMemoryUsed[]
1.5*10.^-33432242 // Timing
MaxMemoryUsed[]
Out[1]= 17417696
Out[2]= {0., 1.500000000000000*10^-33432242}
Out[3]= 17417696
Out[4]= {0., 1.500000000043239*10^-33432242}
Out[5]= 17417696
HTH从帮助中,科学记数法的*^形式始终以输入形式使用,并且与数字标记无关。在NumberMarks下更多Information@belisarius谢谢,但是那张纸条听起来有点含糊不清,因为它只与科学形式有关。我认为它并不含糊。它告诉你使用它不会影响评估,因为它只是一个输入形式工件。@贝里萨利斯有其他方法直接输入这样的数字吗?我想你会在这里找到答案,其中*^是从帮助中解释的。科学符号的*^形式总是用在输入形式中,并且与数字标记无关。在NumberMarks下更多Information@belisarius谢谢,但是那张纸条听起来有点含糊不清,因为它只与科学形式有关。我认为它并不含糊。它告诉你使用它不会影响计算,因为它只是一个输入形式工件。@贝里萨利斯有其他方法直接输入这样的数字吗?我想你会在这里找到答案,解释了*^我理解,但1.5*10。^-33432224并不等于1.5*^-33432224。我想知道为什么像*^表格这样重要的东西在文档中没有被强调?嗯,我同意,但是文档不可能是完美的。为什么这两个数字不相等?两者都是机器精度,而且由于两者都远小于$MinMachineNumber,我认为显示的实际值没有多大意义-从计算角度来看,我认为它们是等效的,我们也可以将两者都替换为零。我理解,但1.5*10。^-3343242不等于1.5*^-3343242。我想知道为什么像*^表格这样重要的东西在文档中没有被强调?嗯,我同意,但是文档不可能是完美的。为什么这两个数字不相等?两者都是机器精度,而且由于两者都远小于$MinMachineNumber,因此我认为显示的实际值没有多大意义-从计算角度来看,我认为它们是等效的,我们也可以将两者替换为零。