air 发表于 2010-8-17 12:11:43

本帖最后由 wayne 于 2010-8-18 12:24 编辑

使用 Borwein四次迭代式 应该最快
但是现在世界上最快的计算pi的程序一般用的是 Ramanujan公式 或 Chudnovsky公式,一般100万位十进制精度在我的电脑上用时约1秒。另外计算pi的新世界纪录8月2日诞生了,使用桌面型电脑,用时3个月,计算到5万亿位。
这里有一份使用GMP库和Chudnovsky公式的计算pi的c程序:
ftp://ftp.gmplib.org/pub/misc/gmp-chudnovsky.c

abiao 发表于 2010-8-17 21:04:11

事实上sin(x)的计算并不慢,优化的关键在于不要计算不必要的精度,从乘除加法开始优化

我从来没有搜到过相类似的算法, 将它称为abiao算法不算过分吧,
在没有计算机的年代,幂级数刚发现的时候,sin(x)就可以计算了,然后用手工计算三十几位精度要不了几天时间吧

这个算法的优雅之处在于简单(原理简单,易于理解),和不算差的性能,比起Martin公式,Ramanujan公式和其他乌七八糟的公式比起来简单得多了

air 发表于 2010-8-17 23:13:31

我认为这些公式并不是乌七八糟的,而是十分伟大的。
典型的BBP公式也十分简单(原理简单),其证明不过数行,但利用其泛化形式不仅仅可以求出pi, 甚至可以求出很多种常数,如Apéry's constant(ζ(3)),ln2,√2等的非常高精度的近似值。另外可以将这种公式引出的算法并行化。

gxqcn 发表于 2010-8-18 08:49:25

算法是否可并行以后会越来越显得举足轻重。

wayne 发表于 2010-8-18 12:20:57

11# air
兄弟,这个程序好像gmp官网上有的,而且链接地址应该是长期有效的。
ftp://ftp.gmplib.org/pub/misc/gmp-chudnovsky.c
我们最好还是给出链接,或者以附件的形式,否则浏览本页面时 滑动块太薄,眼神不好使的拖不动呀

gxqcn 发表于 2010-8-18 14:24:41

为防止发广告灌水等行为,本论坛对新注册用户前三贴限制发链接。
我想 air 可能是因为上述缘故,现在应该可以发带链接的帖子了。

对于简短的引用,可以考虑直接引用;
内容多的,建议以附件形式给出;
内容可能常被更新的,请给出链接。

abiao 发表于 2010-8-18 19:46:34

13# air

呵呵,我有点狂妄了,不过我是从来没听说过这个算法,并且也很简洁

abiao 发表于 2010-8-18 19:52:04

14# gxqcn

sin(x)是可以并行计算的,我现在就是双线程计算
sin x = x-x^3/3!+x^5/5!-...(-1)k-1*x2k-1/(2k-1)!+... (-∞<x<∞)

线程1:x+x^5/5! +x^9/9! +x^13/13! +x^17/17!.。。。。。。。。。
线程2:-x^3/3! -x^7/7! -x^11/11! -x^15/15!。。。。。。。。。

最后2个数相加

liangbch 发表于 2010-8-19 12:26:22

楼主能否回答我在10#提出的问题,
当x接近Pi时,如何使用有效的方法计算sin(x),直接使用级数展开时,收敛速度很慢。

wayne 发表于 2010-8-19 12:42:49

19# liangbch
可以在Pi处展开级数
页: 1 [2] 3 4 5
查看完整版本: 我想的圆周率计算法,1万位十进制精度计算时间在数秒至数十秒左右