擂台:超大整数高精度快速算法-4 (快速计算千万阶乘),该怎么处理
擂台:超大整数高精度快速算法-4 (快速计算千万阶乘)
近几个月来,我把精力主要集中于改进大数算法核心乘法部分,终于取得了令人欣喜的进展,
将最最核心的*大数乘法算法效率提高了近一倍左右!(代价是手工编写了大量汇编代码)
从现有的数款 CPU 及不同的操作系统的测试来看,在计算“1千万的阶乘”时均提速了 50% 以上,
如10000000!: Factorial_old(t0/s) Factorial_new(t1/s) (t0 - t1)/t1 * 100%
机台A 68.929053 43.584557 58.15%
机台B 48.787876 31.227357 56.23%
机台C 65.850629 42.810574 53.82%
机台D 41.436746 25.617276 61.75%
其中,
机台A —— Windows XP SP2,Intel Pentium 4 CPU 2.93GHz,512MB DDR - 133MHz
机台B —— Windows XP SP2,AMD Athlon 64 Processor 3200+,1GB DDR - 200MHz
机台C —— Windows Vista 64,Intel Pentium 4 CPU 3.00GHz,1GB DDR - 200MHz
机台D —— Windows XP SP2,AMD Athlon 64 X2 Dual Core Processor 4800+,2GB DDR2 - 800MHz
如果大家感兴趣,请从下列两个站点之一下载(169 KB,本链接仅在正式发布前有效):
http://hugecalc.ik8.com/download/Factorial.rar
http://www.freewebs.com/maths/download/Factorial.rar
欢迎您将测试结果直接发布出来,或填表(我已制作好了 Excel 表)后反馈给我。。。
如果您发现计算“1千万的阶乘”还有更快的程序,请告诉我,必将千分相赠!
//=============================================================================
这是我继2004年连摆的三场“擂台”后,第四次摆“擂台”,
前几次无论是网友还是本人都收获颇丰,但愿这次也会有不俗的效果。
注:前几次“擂台”的链接如下:
http://topic.csdn.net/T/20040510/14/3049738.html
http://topic.csdn.net/T/20040721/19/3197332.html
http://topic.csdn.net/T/20041010/17/3441530.html
近期还有个帖子也非常值得看,是关于汇编优化的,也是这次升级的技术储备之一:
http://community.csdn.net/Expert/TopicView.asp?id=5505130
------解决方案--------------------
恭喜搂主!!!
本来一直有改进大数乘法的想法,无奈精力有限,新的程序始终没有做出来。我的算法出来以后,是否可胜楼主,没有确切把握。但在小规模的情况下,预计应该和楼主相当,没准还能超越楼主。小规模指在计算乘法时,由于被乘数,乘数相对较短,FFT,FNT无法发挥作用的情况下。典型值为:如计算1万的阶乘。
另外,请问搂住,据你的经验,在计算大数阶乘时,基于10^9的算法和基于2^32的乘法,哪一更有优势。
近几个月来,我把精力主要集中于改进大数算法核心乘法部分,终于取得了令人欣喜的进展,
将最最核心的*大数乘法算法效率提高了近一倍左右!(代价是手工编写了大量汇编代码)
从现有的数款 CPU 及不同的操作系统的测试来看,在计算“1千万的阶乘”时均提速了 50% 以上,
如10000000!: Factorial_old(t0/s) Factorial_new(t1/s) (t0 - t1)/t1 * 100%
机台A 68.929053 43.584557 58.15%
机台B 48.787876 31.227357 56.23%
机台C 65.850629 42.810574 53.82%
机台D 41.436746 25.617276 61.75%
其中,
机台A —— Windows XP SP2,Intel Pentium 4 CPU 2.93GHz,512MB DDR - 133MHz
机台B —— Windows XP SP2,AMD Athlon 64 Processor 3200+,1GB DDR - 200MHz
机台C —— Windows Vista 64,Intel Pentium 4 CPU 3.00GHz,1GB DDR - 200MHz
机台D —— Windows XP SP2,AMD Athlon 64 X2 Dual Core Processor 4800+,2GB DDR2 - 800MHz
如果大家感兴趣,请从下列两个站点之一下载(169 KB,本链接仅在正式发布前有效):
http://hugecalc.ik8.com/download/Factorial.rar
http://www.freewebs.com/maths/download/Factorial.rar
欢迎您将测试结果直接发布出来,或填表(我已制作好了 Excel 表)后反馈给我。。。
如果您发现计算“1千万的阶乘”还有更快的程序,请告诉我,必将千分相赠!
//=============================================================================
这是我继2004年连摆的三场“擂台”后,第四次摆“擂台”,
前几次无论是网友还是本人都收获颇丰,但愿这次也会有不俗的效果。
注:前几次“擂台”的链接如下:
http://topic.csdn.net/T/20040510/14/3049738.html
http://topic.csdn.net/T/20040721/19/3197332.html
http://topic.csdn.net/T/20041010/17/3441530.html
近期还有个帖子也非常值得看,是关于汇编优化的,也是这次升级的技术储备之一:
http://community.csdn.net/Expert/TopicView.asp?id=5505130
------解决方案--------------------
恭喜搂主!!!
本来一直有改进大数乘法的想法,无奈精力有限,新的程序始终没有做出来。我的算法出来以后,是否可胜楼主,没有确切把握。但在小规模的情况下,预计应该和楼主相当,没准还能超越楼主。小规模指在计算乘法时,由于被乘数,乘数相对较短,FFT,FNT无法发挥作用的情况下。典型值为:如计算1万的阶乘。
另外,请问搂住,据你的经验,在计算大数阶乘时,基于10^9的算法和基于2^32的乘法,哪一更有优势。