Hugecalc 8.0.0.0 Vs Mathematica 10.0
1、阶乘测试待计算式----------------------Hugecalc时间---------------------------Mathematica时间
10000!---------------------------0.002946---------------------------------0
100000!-------------------------0.031441---------------------------------0.015625
1000000!------------------------0.339842---------------------------------0.250000
10000000!----------------------4.403465---------------------------------4.281250
20000000!----------------------9.095976----------------------------------9.765625
40000000!----------------------19.190016--------------------------------22.359375
50000000!----------------------25.985294--------------------------------28.656250
80000000!----------------------失败---------------------------------------51.359375
100000000!--------------------失败---------------------------------------64.562500测试详尽,点评专业
结论:在数字较小的阶乘计算上,Mathematica占优,但当数字很大时,HugeCalc占优,虽然HugeCalc在最后两个测试中因内存耗尽而失败,但可以预测HugeCalc也应该占优。
另外在Mahtmetica中,n! 使用一种基于素数幂动态分解的 Schönhage 的 O(log(n)M(n)) 算法。 请问你测试的OS是在32位下,还是在64位下?
如果是 x64 下,Mathematica 是对应的64位版本吗? gxqcn 发表于 2014-8-25 16:26
请问你测试的OS是在32位下,还是在64位下?
如果是 x64 下,Mathematica 是对应的64位版本吗?
Mathematica是64位版本,另外接下来还有测试 2、双阶乘测试
待计算式----------------------Hugecalc时间---------------------------Mathematica时间
10000!!-------------------------0.001620------------------------------------0.
100000!!------------------------0.014161------------------------------------0.
1000000!!-----------------------0.175807-------------------------------0.093750
10000000!!----------------------2.307518------------------------------1.890625
100000000!!--------------------27.857943-----------------------------30.000000
结论:和阶乘一样,数字较小的双阶乘计算上,Mathematica占优,但当数字很大时,HugeCalc占优。 3、用自然数定义的素数阶乘(注:因为Mathematica没有内置函数,所以直接使用定义做连乘计算并做并行处理,代码为\(\text{Parallelize}\left[\prod _{i=1}^{\pi (n)} p_i\right]\)
待计算式----------------------Hugecalc时间---------------------------Mathematica时间
10000#------------------------0.001093--------------------------------0.015625
100000#----------------------0.007885--------------------------------0.046875
1000000#---------------------0.087516--------------------------------0.125000
10000000#-------------------1.076198--------------------------------0.718750
100000000#-----------------13.055120------------------------------ 9.546875
点评:这个很出人意料,因为事实上除了并行操作以外,Mathematica并没有对其作任何的特别优化,但是居然在数值较大时赶超HugeCalc,很惊人,从数据来看在大于某个数值以后HugeCalc的时间突然增长,是否可以优化一下?
我就爱作弊 发表于 2014-8-25 16:53
Mathematica是64位版本,另外接下来还有测试
64位平台下可以有更多的优化,且内存可访问空间更大。 本帖最后由 我就爱作弊 于 2014-8-25 17:39 编辑
4、用素数定义的素数阶乘(注:因为Mathematica没有内置函数,所以直接使用定义做连乘计算并做并行处理,代码为\(\text{Parallelize}\left[\prod _{i=1}^n p_i\right]\)
待计算式----------------------Hugecalc时间---------------------------Mathematica时间
\(P_{10000}\#\)------------------------0.008274--------------------------------0.046875
\(P_{100000}\#\)----------------------0.113006--------------------------------0.109375
\(P_{1000000}\#\)---------------------1.731811--------------------------------0.718750
\(P_{5000000}\#\)-------------------10.862294--------------------------------8.250000
\(P_{10000000}\#\)-----------------25.114525------------------------------ 18.234375
点评:和上个测试一样,Mathematica总体占优,可以考虑优化。
5、斐波那契数列
待计算式----------------------Hugecalc时间---------------------------Mathematica时间
Fi(10000)-----------------------0.000813--------------------------------0.
Fi(100000)---------------------0.036240--------------------------------0.
Fi(1000000)-------------------0.038457---------------------------------0.
Fi(10000000)------------------0.310992----------------------------0.046875
Fi(100000000)-----------------1.185741----------------------------0.812500
Fi(1000000000)---------------11.432018-------------------------10.359375
Fi(2000000000)-------------------失败-----------------------------22.515625
结论:虽然在所有测试中,Mathematica都占据上风,但是很难确定是否对于更大的数值,Mathematica仍能比HugeCalc更快。
另附:在Mathematica中,Fibonacci 使用基于 n 的二进制序列的迭代方法。
6、Lucas数列
待计算式----------------------Hugecalc时间---------------------------Mathematica时间
Lucas(1000000)--------------0.006059---------------------------------------0.
Lucas(10000000)-------------0.052937--------------------------------------0.031250
Lucas(100000000)-----------0.725224--------------------------------------0.484375
Lucas(1000000000)----------5.878144--------------------------------------5.859375
Lucas(2000000000)----------11.598069------------------------------------13.343750
结论:在数字较小的Lucas数列计算上,Mathematica占优,但可以预见当数字很大时,HugeCalc占优。 7、组合(二项式系数)运算
待计算式----------------------Hugecalc时间---------------------------Mathematica时间
C(20000,10000)-------------0.001334-----------------------------------------0.
C(200000,100000)----------0.011702-----------------------------------------0.
C(2000000,1000000)-------0.131089-------------------------------------0.062500
C(20000000,10000000)----1.574926-------------------------------------0.937500
C(200000000,100000000)-19.268684----------------------------------14.015625
结论:HugeCalc应该改进一下算法以赶超Mathematica
另附:在Mathematica中,Binomial 及其相关函数使用一个分治算法来平衡中间乘积的位数.