### 4 releases

 0.2.0 Oct 25, 2022 Apr 18, 2021 Apr 18, 2021 Apr 18, 2021

#443 in Science

Used in reckoner

190KB
4.5K SLoC

# Reckoner

A high level arbitrary precision integer and rational arithmetic library wrapping imath.

## Example

The following example computes an approximation of pi using the Newton / Euler Convergence Transformation.

use reckoner::{Integer, Rational};

fn factorial(v: &Integer) -> Integer {
let mut accum = 1.into();
let mut f = v.clone();

while f > 0 {
accum *= &f;
f -= 1;
}

accum
}

// Product of all odd integer up to the given value.
fn odd_factorial(v: &Integer) -> Integer {
let mut accum = 1.into();
let mut 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)
// 
fn compute_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.

## Crates

The MSRV for both crates is 1.64.0.

### reckoner

A high level arbitrary precision arithmetic library supporting integer and rational numbers.

### creachadair-imath-sys

FFI bindings for imath.

## Documentation

Documentation for reckoner from main branch

Documentation for creachadair-imath-sys from main branch

~0–2MB
~38K SLoC