2011-02-08 113 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