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() -> Self

Create an empty cache.

Source

pub fn pi<const B: Word, R: Round>( &mut self, precision: usize, ) -> Rounded<FBig<R, B>>

π 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: Word, R: Round>(&mut self, precision: usize) -> FBig<R, B>

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: Word, R: Round>(&mut self, precision: usize) -> FBig<R, B>

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: Word, R: Round>( &mut self, precision: usize, ) -> FBig<R, B>

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

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

impl Default for ConstCache

Source§

fn default() -> Self

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

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> AggregateExpressionMethods for T

Source§

fn aggregate_distinct(self) -> Self::Output
where Self: DistinctDsl,

DISTINCT modifier for aggregate functions Read more
Source§

fn aggregate_all(self) -> Self::Output
where Self: AllDsl,

ALL modifier for aggregate functions Read more
Source§

fn aggregate_filter<P>(self, f: P) -> Self::Output
where P: AsExpression<Bool>, Self: FilterDsl<<P as AsExpression<Bool>>::Expression>,

Add an aggregate function filter Read more
Source§

fn aggregate_order<O>(self, o: O) -> Self::Output
where Self: OrderAggregateDsl<O>,

Add an aggregate function order Read more
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> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Sync + Send>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
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> IntoSql for T

Source§

fn into_sql<T>(self) -> Self::Expression
where Self: Sized + AsExpression<T>,

Convert self to an expression for Diesel’s query builder. Read more
Source§

fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
where &'a Self: AsExpression<T>,

Convert &self to an expression for Diesel’s query builder. Read more
Source§

impl<T> IntoSql for T

Source§

fn into_sql<T>(self) -> Self::Expression

Convert self to an expression for Diesel’s query builder. Read more
Source§

fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
where &'a Self: AsExpression<T>, T: SqlType + TypedExpressionType,

Convert &self to an expression for Diesel’s query builder. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

impl<T> WindowExpressionMethods for T

Source§

fn over(self) -> Self::Output
where Self: OverDsl,

Turn a function call into a window function call Read more
Source§

fn window_filter<P>(self, f: P) -> Self::Output
where P: AsExpression<Bool>, Self: FilterDsl<<P as AsExpression<Bool>>::Expression>,

Add a filter to the current window function Read more
Source§

fn partition_by<E>(self, expr: E) -> Self::Output
where Self: PartitionByDsl<E>,

Add a partition clause to the current window function Read more
Source§

fn window_order<E>(self, expr: E) -> Self::Output
where Self: OrderWindowDsl<E>,

Add a order clause to the current window function Read more
Source§

fn frame_by<E>(self, expr: E) -> Self::Output
where Self: FrameDsl<E>,

Add a frame clause to the current window function Read more