数学研发网设为首页收藏本站

数学研发论坛

 找回密码
 欢迎注册
查看: 2987|回复: 36

[测试] Hugecalc 8.0.0.0 Vs Mathematica 10.0

[复制链接]
发表于 2014-8-25 15:43:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?欢迎注册

x
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)) 算法。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-8-25 16:26:54 | 显示全部楼层
请问你测试的OS是在32位下,还是在64位下?
如果是 x64 下,Mathematica 是对应的64位版本吗?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-8-25 16:53:19 | 显示全部楼层
gxqcn 发表于 2014-8-25 16:26
请问你测试的OS是在32位下,还是在64位下?
如果是 x64 下,Mathematica 是对应的64位版本吗?

Mathematica是64位版本,另外接下来还有测试
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-8-25 17:03:24 | 显示全部楼层
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占优。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-8-25 17:25:11 | 显示全部楼层
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 17:25:44 | 显示全部楼层
我就爱作弊 发表于 2014-8-25 16:53
Mathematica是64位版本,另外接下来还有测试


64位平台下可以有更多的优化,且内存可访问空间更大。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-8-25 17:36:53 | 显示全部楼层
本帖最后由 我就爱作弊 于 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总体占优,可以考虑优化。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-8-25 17:49:08 | 显示全部楼层
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] 使用基于 n 的二进制序列的迭代方法。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-8-25 17:58:28 | 显示全部楼层
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占优。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-8-25 18:11:36 | 显示全部楼层
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 及其相关函数使用一个分治算法来平衡中间乘积的位数.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|Archiver|数学研发网 ( 苏ICP备07505100号  

GMT+8, 2017-11-18 14:39 , Processed in 0.220985 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表