高精度计算圆周率程序
我感觉我已经圆满了。我从上大学开始就一直在搞这个高精度计算库,现在我把它叫做 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 才打开一亿位的就死机了 图片中1399个数字是不是有问题……
“77”出现了(第3行2次,第6行2次,第9-14行1次,倒数第六行一次)
肉眼看见了11次
pi一般会认为是一个正规数,也就是00-99出现频率大致相同
77出现的频率是不是太高点了?
确实很快,赞一个。能做到这个需要超强的毅力和坚持。
目前工作比较忙。任意精度快速算法,暂时放下了。 .·.·. 发表于 2018-6-15 03:40
图片中1399个数字是不是有问题……
“77”出现了(第3行2次,第6行2次,第9-14行1次,倒数第六行一次)
...
这计算圆周率的,还与你使用什么样的算法有关系吧。
不过我没耐心做这个,我只会用mathematica 你的 ilmp 可以在VB中用吗?我VB懂得多一点。用API的形式 或者 VB类库的形式都行,有这样的方式吗?
另外下载链接都已经过期了,下不了了。 这个,计算圆周率的似乎http://www.numberworld.org/y-cruncher/ 用这个更快,不过软件是你的个人作品,比我强太多了,我只会写简单程序 链接无法下载了 补个档,这是1楼所说的旧版ilmp代码
页:
[1]