用GMP库快速计算 Pi · π
微信公众号:官渡三哥
把NUC又换成了macOS,因为解决了关机老重启的问题,可用性大增 。苹果的下一代操作系统macOS Big Sur就要出来了,又想折腾了 。想了解如何在NUC上黑苹果 macOS Catalina 的,点击如下传送门:
算法
目前算PI比较有名的就是 楚德诺夫斯基 哥俩(The Chudnovsky Brothers) 开发的并命名的算法了。
他们于1989年发表的公式创造了当时计算PI的世界记录,22.4万亿位 (22.4 Trillion)。这个公式长下面这个样子:(知乎居然支持 TeX 公式输入,惊倒了 )
\Large \frac{1}{\pi} = \frac{\sqrt{10005}}{4270934400} \sum_{k=0}^{\infty}(-1)^k\frac{(6k)!}{(k!)^3(3k)!}\frac{(13591409+545140134k)}{640320^{3k}}
具体算法和python代码实现可以看如下链接:
嗯看起来还不错,唯一的问题就是太慢了。他里面算到一亿位要542秒,想要用大几十秒就完成可以么?答案是可以的。
工具
- GMP 库
可以下载压缩包后自行编译并使用,但比较麻烦。对于mac 可以用 HomeBrew 来完成:
% brew install gmp
( 对于Debian 系的可以从 apt 源直接装)
$ sudo apt install libgmp-dev
- Xcode command line tools 或 g++
% clang++ --version
Apple clang version 12.0.0 (clang-1200.0.32.21)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
- 一个使用GMP库的 C++ 源程序
编译
% clang++ -o chud_pi Chud_Pi.cc -lgmpxx -lgmp -std=c++11 -O3
运行
% ./chud_pi
Usage:
chud_pi n <file>
where <file> is one of:
- A legal file name for saving pi value or
- BLANK, will just compute without saving.
The n is an integer number specifying the pi digits to compute