浮点数的基本输入形式?

时间:2011-02-08 23:13:40

标签: 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[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 个答案:

答案 0 :(得分: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