2011-02-08 62 views
1

我只是发现了两种输入形式之间的根本区别的浮点数:浮点数的基本输入形式?

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 

但我不能找到文件形式为*^。它是浮点数的一个真正的基本输入形式吗?其他基地的数字如何?

为什么第二种形式是如此昂贵?

+1

从帮助`的* ^形式的科学记数法始终以InputForm使用,并且是独立的NumberMarks的。 `在**数字标记** _更多信息_ – 2011-02-08 23:39:36

+0

@belisarius谢谢,但这个音符听起来含糊不清,因为它只与ScientificForm有关。 – 2011-02-09 00:21:46

回答

4

关于时间和内存消耗 - 这些是评估的后果,与不同的形式无关。当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