liangbch 发表于 2008-4-17 15:24:44

HugeCalc中大数除法仍有优化的余地,我用自己的除法代码,可将9#程序的除法部分的速度提高10%(使用HugeCalc的代码,计算100万位,除法部分所用时间为2.062,改用我的求倒数再相乘后,除法部分的时间降至1.875),等我有空时,将自己写的大数除法(调用HugeCalc中的大数乘法)贴上来。

大家可能注意到9#的代码包含下面的代码,这就是用来测试我自己写的大数除法用的。
#else
      {
                void inverse( const integer *s, integer *pResult,int len);
                integer t;
                inverse(&q,&t,len);
                p *=t;
      }
#endif

gxqcn 发表于 2008-4-17 15:30:42

欢迎任何改进!:handshake

原帖由 无心人 于 2008-4-17 15:14 发表 static/image/common/back.gif
不是9#

是你给的highCalc.rar

我将他的老版本也打包进去了,请重新下载:static/image/filetype/rar.gif HighCalc.rar (235.42 KB)

liangbch 发表于 2008-4-17 21:35:46

我说的意思是PiFast内核不可能会领先那么多吧?
也许是我们外围算法或调用没做好。。。
   你这么一说,我也有种感觉,也许Pifast的大数乘法不会快HugeCalc 3倍以上,这太快了,比GMP还快,快的有点不可思议。

无心人 发表于 2008-4-17 21:46:37

某些算法大数乘法并不需要乘出结果

他可以在FFT上持续计算,直到需要乘法结果时再算出来
可能他利用了N个序列的FFT来合成2N个序列的来持续FFT

gxqcn 发表于 2008-4-18 07:52:55

“持续FFT”?

我以前考虑过,但效率并不理想。

因为要考虑到最终乘积,所以每次的变换长度都是最终的长度,
如果逐级处理,则早些阶段的可用较小的变换长度处理。

无心人 发表于 2008-4-18 08:01:53

N个序列的FFT可变换成2N个序列的FFT
其操作只是序列的一个复制操作

mathematica 发表于 2008-12-14 12:47:08

mathematica7.0计算E的百万位代码

input:Timing]
output:{2.25,一百万位的数字我就不贴出结果了!}

追究简单是我的原则!不到万不得已的情况下,我是
不会选择编程的!我承认自己有时候喜欢现成的!:lol

无心人 发表于 2008-12-14 14:17:58

你那不叫算法
叫函数调用

仙剑魔 发表于 2008-12-14 20:52:15

我建议算e^x
光算个e貌似没有实际价值...怎么算都是常数...
e^x更有挑战性...

无心人 发表于 2008-12-14 21:10:56

这个,好像计算e^x不是很困难吧
页: 1 2 3 4 5 [6] 7 8 9 10 11 12
查看完整版本: 计算百万位e