超高精度π计算器 - 使用Chudnovsky公式和Binary Splitting算法
- 🚀 超高精度: 支持计算数百万位甚至数十亿位π
- ⚡ 高性能: 使用FFT大整数乘法和Binary Splitting优化
- 🧵 多线程: 支持并行计算,充分利用多核CPU
- 🎯 SIMD优化: 支持AVX2、AVX512、NEON、SVE指令集
- 💾 智能存储: 支持ZSTD压缩和分块存储
- 🔧 模块化设计: 清晰的架构,易于扩展
1/π = 12 * Σ ((-1)^k * (6k)! * (13591409 + 545140134k)) /
((3k)! * (k!)^3 * 640320^(3k + 3/2))
每计算一项可获得约14.18位有效数字。
使用Binary Splitting算法高效计算级数求和,时间复杂度为O(M(n) log n),其中M(n)是大整数乘法的时间复杂度。
支持多种乘法算法自动切换:
- Schoolbook: O(n²),适用于小整数 (< 128位)
- Karatsuba: O(n^1.585),适用于中等整数
- Toom-Cook: O(n^1.465),适用于大整数
- FFT: O(n log n),适用于超大整数
# 克隆仓库
git clone https://github.com/tortb/PiCalcultor-cpp.git
cd PiCalcultor-cpp
# 创建构建目录
mkdir build && cd build
# 配置CMake
cmake .. -DCMAKE_BUILD_TYPE=Release
# 编译
cmake --build . -j$(nproc)
# 运行
./torc-pi -d 1000# 计算1000位π
torc-pi -d 1000
# 使用8线程计算100万位π
torc-pi -d 1000000 -t 8
# 输出到文件
torc-pi -d 10000 -o pi.txt
# 显示统计信息
torc-pi -d 1000 --stats
# 显示CPU信息
torc-pi --cpu-info| 选项 | 说明 | 默认值 |
|---|---|---|
-d, --digits N |
计算π的位数 | 1000 |
-t, --threads N |
使用的线程数 | 1 |
-o, --output FILE |
输出文件路径 | 标准输出 |
-f, --format FMT |
输出格式 (text/hex) | text |
-c, --compress |
启用ZSTD压缩 | 否 |
-v, --verify |
验证结果 | 是 |
--stats |
显示统计信息 | 否 |
--cpu-info |
显示CPU信息 | 否 |
PiCalcultor-cpp/
├── CMakeLists.txt # 主CMake配置
├── README.md # 本文件
├── cmake/ # CMake模块
│ ├── CompilerConfig.cmake
│ ├── SimdDetection.cmake
│ └── Dependencies.cmake
├── include/torc-pi/ # 头文件
│ ├── bigint/ # 大整数库
│ ├── fft/ # FFT引擎
│ ├── pi/ # π计算算法
│ ├── threading/ # 线程池
│ ├── memory/ # 内存管理
│ ├── storage/ # 存储系统
│ ├── cpu/ # CPU特性检测
│ └── detail/ # 内部实现
├── src/ # 源文件
│ ├── bigint/ # 大整数实现
│ ├── fft/ # FFT实现
│ ├── pi/ # π计算实现
│ ├── threading/ # 线程池实现
│ ├── memory/ # 内存管理实现
│ ├── storage/ # 存储实现
│ ├── cpu/ # CPU检测实现
│ └── cli/ # 命令行工具
├── tests/ # 单元测试
├── benchmarks/ # 基准测试
├── docs/ # 文档
└── .github/workflows/ # CI/CD配置
- CMake >= 3.20
- C++23 编译器 (GCC 13+, Clang 17+, MSVC 2022+)
- ZSTD (可选,用于压缩)
- Google Test (用于测试)
- Google Benchmark (用于基准测试)
测试环境: AMD Ryzen 9 5950X, 64GB RAM
| 精度 | 单线程 | 4线程 | 8线程 |
|---|---|---|---|
| 1,000位 | 0.01s | 0.01s | 0.01s |
| 10,000位 | 0.1s | 0.05s | 0.03s |
| 100,000位 | 2.1s | 0.8s | 0.5s |
| 1,000,000位 | 45s | 18s | 12s |
- ✅ Linux (x86_64, ARM64)
- ✅ macOS (x86_64, Apple Silicon)
- ✅ Windows (x64, ARM64)
- 第一阶段: 项目骨架
- 第二阶段: BigInt实现
- 第三阶段: FFT引擎
- 第四阶段: Binary Splitting
- 第五阶段: Chudnovsky算法
- 第六阶段: 多线程支持
- 第七阶段: 压缩与存储
- 第八阶段: 性能优化
- 第九阶段: 测试与CI
- 第十阶段: 发布版本
MIT License
Torc
- Chudnovsky兄弟提出的公式
- GMP库的设计灵感
- y-cruncher的优化思路