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,因此我认为显示的实际值没有多大意义-从计算角度来看,我认为它们是等效的,我们也可以将两者替换为零。