Ickiverar 发表于 2018-6-12 06:51:50

高精度计算圆周率程序

我感觉我已经圆满了。
我从上大学开始就一直在搞这个高精度计算库,现在我把它叫做 ilmp,以前不是这个名字。
这个库,见证了我从学习vb语言,到C++,到C,到汇编的历程。
它从内部用10进制,到10000进制,到1亿进制,再到2^64进制……
从算六千万位数的乘法要五百秒,到100秒,40秒,13秒,7秒,最后是2.5秒……
从代码垃圾得不能看,到现在已经有了相当的自解释能力……
陪我走过四年,如今我也要毕业了。终于可以说,有一个不错的结果了。

我在这里分享一堆源码和一个程序,这些源码是两年前的 ilmp 版本,在 VS 上可以直接编译算圆周率,百万位带输出大概2.5秒左右,这速度不是很快。
里面的 SSA 算法的部分是我下最大精力的部分。直到现在的 ilmp 里,关于SSA的源码基本都是从这拷过来的。

而程序是用现在的 ilmp 版本写的,用来算圆周率。单线程百万位带输出 0.47 秒,我对这个速度很满意了。
如此大的加速,主要来自于
1.汇编过程的手工循环展开,这几乎把所有过程加速100%。
2.写了更多汇编和C的整数除法过程,除法加速了300%以上。
3.快速的 Integer 类,与支持浮点的 Number 类不同,Integer 在每次计算时尽量在原内存上计算,减少 new/delete 的次数。
new和delete 对性能影响很严重,在算圆周率时能让性能折半,而在对小数据计算时甚至会拖慢程序 30 倍。

旧版 ilmp 的代码:
链接:https://pan.baidu.com/s/1oLq_ajiHZ7j6p6014w4dOQ 密码:fqzm

基于新版 ilmp 的圆周率计算器:
https://pan.baidu.com/s/1oWAfzq7TRy2x8-MXZq_yPQ



补充内容 (2022-8-25 04:55):
旧版代码可见9楼,新版程序可见 https://bbs.emath.ac.cn/thread-9477-1-1.html

倪举鹏 发表于 2018-6-12 09:06:16

才打开一亿位的就死机了

.·.·. 发表于 2018-6-15 03:40:38

图片中1399个数字是不是有问题……
“77”出现了(第3行2次,第6行2次,第9-14行1次,倒数第六行一次)
肉眼看见了11次
pi一般会认为是一个正规数,也就是00-99出现频率大致相同
77出现的频率是不是太高点了?

liangbch 发表于 2018-6-19 18:04:56

确实很快,赞一个。能做到这个需要超强的毅力和坚持。
目前工作比较忙。任意精度快速算法,暂时放下了。

mathematica 发表于 2018-8-31 14:55:35

.·.·. 发表于 2018-6-15 03:40
图片中1399个数字是不是有问题……
“77”出现了(第3行2次,第6行2次,第9-14行1次,倒数第六行一次)
...

这计算圆周率的,还与你使用什么样的算法有关系吧。
不过我没耐心做这个,我只会用mathematica

ShuXueZhenMiHu 发表于 2020-10-1 08:22:47

你的 ilmp 可以在VB中用吗?我VB懂得多一点。用API的形式 或者 VB类库的形式都行,有这样的方式吗?

另外下载链接都已经过期了,下不了了。

mathematica 发表于 2020-11-27 10:18:32

这个,计算圆周率的似乎http://www.numberworld.org/y-cruncher/   用这个更快,不过软件是你的个人作品,比我强太多了,我只会写简单程序

fsleo 发表于 2022-7-31 17:23:50

链接无法下载了

Ickiverar 发表于 2022-8-25 04:54:32

补个档,这是1楼所说的旧版ilmp代码


页: [1]
查看完整版本: 高精度计算圆周率程序