Skip to main content

CLI for calculating millions of Pi digits within seconds. Various algorithms are supported.

Project description

Pi Calculation in Rust

This is a Rust CLI tool for calculating Pi digits using various algorithms. It can compute to a million digits of Pi in less than 1 second (see below).

Supported algorithms are listed as follows:

Algorithm Note
Leibniz Slowest
Bailey-Borwein-Plouffe (BBP)
Spigot Gosper
Newton 9th Order Convergence Page 9 of the paper
Borwein's Formula
Brent-Salamin
Gauss-Legendre Only slightly different from Brent-Salamin.
Machin-like Formula Using arctan to calculate Pi.
Chudnovsky
Chudnovsky Binary Splitting World record-breaking algorithm.
Chudnovsky Binary Splitting Parallelized Fastest.

Installation

cargo install --git https://github.com/BreezeWhite/calc_pi

Usage

CLI for calculating millions of Pi digits within seconds. Various algorithms are supported.

Usage: calc_pi [OPTIONS] <COMMAND>

Commands:
  leibniz  Leibniz formula
  bbp      Bailey–Borwein–Plouffe formula
  spg      Spigot Gosper algorithm
  newton   Newton method. 9th order convergence
  bn       Borwein algorithm nonic (9th) convergence version
  bs       Brent–Salamin algorithm
  gl       Gauss–Legendre algorithm
  ag       Machin-like formulas (arctan)
  chu      Chudnovsky algorithm
  cb       Chudnovsky algorithm with binary splitting
  cbp      Chudnovsky algorithm with binary splitting and multi-thread
  help     Print this message or the help of the given subcommand(s)

Options:
  -p, --prec <PREC>            Precision of Pi to calculate in digits [default: 1000]
      --measure-time           Measure and show the runtime
      --output-to <OUTPUT_TO>  Path of file to output and store the calculated Pi digits
  -h, --help                   Print help
  -V, --version                Print version
# Calculate Pi with Chudnovsky binary splitting algorithm to 1,000,000 digits.
calc_pi -p 1000000 cbp

# Show the runtime.
calc_pi -p 1000000 --measure-time cbp

# Output the result to file
calc_pi -p 1000000 --output-to pi.txt cbp

Recommended Reading

Performance

Test Environment

  • OS: Ubuntu 20.04
  • CPU: Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
  • RAM: 16GB
  • Rust Version: 1.86.0
  • Cargo Version: 1.86.0
Algorithm 9 digits 1K digits 10K digits 100K digits 1M digits 10M digits
Leibniz 28.568 s - - - - -
Bailey-Borwein-Plouffe - 2.5 ms 660.3 ms 208.9 s - -
Spigot Gosper - 3.1 ms 867.6 ms 250.217 s - -
Newton - 5.2 ms 43.7 ms 1.421 s 30.475 s -
Borwein Nonic - 3.6 ms 159.6 ms 5.123 s 68.424 s -
Brent-Salamin - - 3.2 ms 70.8 ms 1.231 s 21.364 s
Gauss-Legendre - - 3.5 ms 70.6 ms 1.229 s 21.121 s
Machin-like Formula - 1.9 ms 14.9 ms 465.4 ms 8.673 s -
Chudnovsky - - 5.1 ms 369.2 ms 38.22 s -
Chudnovsky Binary Splitting - - 2.0 ms 23.5 ms 434.1 ms 7.9 s
Chudnovsky Binary Splitting Parallelized - - - 19.9 ms 293.7 ms 4.628 s
Algorithm 100M digits
Chudnovsky Binary Splitting 109.58 s
Chudnovsky Binary Splitting Parallelized 48.739 s
y-cruncher (single-thread) 21.908 s
y-cruncher (multi-thread) 5.354 s

Notes

  • Parallel version of Chudnovsky Binary Splitting uses half of the CPU cores available on the system.
  • Use Integer for variables when possible. This boosts performance significantly.

Reference

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

calc_pi-0.1.0-py3-none-manylinux_2_34_x86_64.whl (581.1 kB view details)

Uploaded Python 3manylinux: glibc 2.34+ x86-64

calc_pi-0.1.0-cp313-cp313-manylinux_2_34_x86_64.whl (480.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

calc_pi-0.1.0-cp312-cp312-win_amd64.whl (470.5 kB view details)

Uploaded CPython 3.12Windows x86-64

File details

Details for the file calc_pi-0.1.0-py3-none-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for calc_pi-0.1.0-py3-none-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 41402cd05d680faf71d1d25071b8ab036c5eae3eb496f7521b6a2c4372c05255
MD5 3dd78cabcf48b79b4da9773b8c92d3d0
BLAKE2b-256 46dfb69a0e08db5a8e4a570b0517a2b36ac86aba3c7967556c4933896d730052

See more details on using hashes here.

File details

Details for the file calc_pi-0.1.0-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for calc_pi-0.1.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 a4b9b653a27293833f918b33b2f574c5dd73f082c24dfb616062e252fed8ded7
MD5 e8e61a90d84ec397c7b0563c08e9e480
BLAKE2b-256 734b6491d08b3720d1dc42996a42bf3b623cc8460469ddf4721da1d5cffb0e64

See more details on using hashes here.

File details

Details for the file calc_pi-0.1.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: calc_pi-0.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 470.5 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.9.1

File hashes

Hashes for calc_pi-0.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ed16b52736bffdcb95766676a6d34ec00189cbfe399a762cfff33860731ed62c
MD5 a1e5a7887bbfcecd3b404244d17f7828
BLAKE2b-256 f53b08ad265f79c315a3dd879bafbe04bc40d64ec388a2e3ca0082fd2de858b7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page