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处展开级数