Skip to main content

ConstCache

Struct ConstCache 

Source
pub struct ConstCache { /* private fields */ }
Expand description

An opt-in cache of mathematical constants.

Holds exact binary-splitting tree state so that repeated calls at increasing precision extend prior work instead of recomputing from scratch. For example, computing π at 100 digits and then at 1000 digits only pays for the extra ~900 digits of work.

The cache is base-free: a single ConstCache serves any base. The base and rounding mode are specified on each method call (e.g. cache.pi::<10, HalfAway>(100) for 100 decimal digits).

ConstCache is a plain struct of big integers, so it is Send + Sync. The methods take &mut self (they extend the cached state on a miss), so a caller either owns one directly, or — to share it across many values and operations — wraps it in Rc<RefCell<ConstCache>> as the CachedFBig type does. To share one cache across threads, wrap a ConstCache (or a CachedFBig) in Arc<Mutex<..>>.

§Examples

use dashu_float::ConstCache;
use dashu_float::round::mode::HalfAway;

let mut cache = ConstCache::new();
// first call computes from scratch
let _pi_100 = cache.pi::<10, HalfAway>(100).value();
// second call at higher precision extends the cached state
let pi_1000 = cache.pi::<10, HalfAway>(1000).value();
assert!(pi_1000.to_string().starts_with("3.141592653589793"));

Implementations§

Source§

impl ConstCache

Source

pub const fn new() -> ConstCache

Create an empty cache.

Source

pub fn pi<const B: u64, R>( &mut self, precision: usize, ) -> Approximation<FBig<R, B>, Rounding>
where R: Round,

π at precision base-B digits, rounded per R. Extends any prior π state cached in self.

§Panics

Panics if precision is 0.

Source

pub fn ln2<const B: u64, R>(&mut self, precision: usize) -> FBig<R, B>
where R: Round,

ln(2) at precision base-B digits, reusing the cached L(6) and L(99) sub-series.

§Panics

Panics if precision is 0.

Source

pub fn ln10<const B: u64, R>(&mut self, precision: usize) -> FBig<R, B>
where R: Round,

ln(10) at precision base-B digits, reusing the cached L(6), L(99), and L(9) sub-series.

§Panics

Panics if precision is 0.

Source

pub fn ln_base<const B: u64, R>(&mut self, precision: usize) -> FBig<R, B>
where R: Round,

ln(B) at precision base-B digits, reusing the cached ln2 / ln10 where possible.

§Panics

Panics if precision is 0.

Source

pub fn total_terms(&self) -> usize

Sum of num_terms across all populated cache slots.

Source

pub fn total_words(&self) -> usize

Sum of word counts across all cached big integers (P, Q, T, and the cached √10005 isqrt).

This reflects the underlying storage words used by the cached state.

Source

pub fn clear(&mut self)

Clear all cached constant state, freeing the underlying memory.

After calling clear(), the next constant computation will start from scratch rather than extending the prior cached state.

Trait Implementations§

Source§

impl Debug for ConstCache

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for ConstCache

Source§

fn default() -> ConstCache

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.