A high level arbitrary precision integer and rational arithmetic library wrapping imath.
The following example computes an approximation of pi using the Newton / Euler Convergence Transformation.
use reckoner::{Integer,Rational};fnfactorial(v:&Integer) -> Integer{letmut accum = 1.into();letmut f = v.clone();while f > 0{
accum *= &f;
f -= 1;}
accum
}// Product of all odd integer up to the given value.fnodd_factorial(v:&Integer) -> Integer{letmut accum = 1.into();letmut f = if v % 2 == 0{ v - 1}else{ v.clone()};while f > 0{
accum *= &f;
f -= 2;}
accum
}// ```// \frac{\pi}{2}// = \sum_{k=0}^\infty\frac{k!}{(2k+1)!!}// = \sum_{k=0}^{\infty} \cfrac {2^k k!^2}{(2k + 1)!}// = 1+\frac{1}{3}\left(1+\frac{2}{5}\left(1+\frac{3}{7}\left(1+\cdots\right)\right)\right)// ```fncompute_pi_approx(iterations:u32) -> Rational{2*(0..iterations).map(Integer::from).map(|n| {let numerator = factorial(&n);let denominator = odd_factorial(&(2* n + 1));(numerator, denominator).into()}).sum::<Rational>()}See examples/ for more.
The MSRV for both crates is 1.70.0.
A high level arbitrary precision arithmetic library supporting integer and rational numbers.
FFI bindings for imath.
Documentation for reckoner from main branch
Documentation for creachadair-imath-sys from main branch
Download the crate using the command
git clone --recurse-submodules https://github.com/declanvk/reckonerso that you also get the submodule sources, which are required to compile the creachadair-imath-sys crate. If you already cloned the project and forgot --recurse-submodules, you can combine the git submodule init and git submodule update steps by running git submodule update --init.