pub struct BigNumBase<T>where
T: Base,{
pub sig: u64,
pub exp: u64,
pub base: T,
}
Expand description
This is the main struct for bignumbe-rs
.
It takes a generic argument for the base, e.g.
BigNumBase<Binary>
. It is recommended to either create a custom type alias or
use one of the predefined ones (BigNumBin, BigNumOct, BigNumDec, BigNumHex
). You
should be able to use them pretty much exactly like other numbers in most contexts.
For convenience I define From
and all math operations for u64
, but keep in mind
that the From
implementation, like new
, involves recalculating the base ranges.
use bignumbe_rs::{BigNumBase, Binary};
type BigNum = BigNumBase<Binary>;
let bn1 = BigNum::from(1);
let bn2 = BigNum::from(u64::MAX);
// Since this operation's result doesn't fit in `u64` it wraps over to the minimum
// significand and increments the `exp`
assert_eq!(bn1 + bn2, BigNum::new(1 << 63, 1));
assert_eq!(bn1 / bn2, BigNum::from(0));
assert_eq!(bn1 * bn2, bn2);
assert_eq!(bn2 * bn2, BigNum::new(u64::MAX - 1, 64));
Fields§
§sig: u64
§exp: u64
§base: T
Implementations§
Source§impl<T> BigNumBase<T>where
T: Base,
impl<T> BigNumBase<T>where
T: Base,
Sourcepub fn new(sig: u64, exp: u64) -> Self
pub fn new(sig: u64, exp: u64) -> Self
Creates a new BigNumBase
instance that represents the value
sig * T::NUMBER^exp
. E.g. BigNumBin::new(12341234, 12341)
represents
12341234 * 2^12341
. This method will perform normalization if necessary, to
ensure the significand is in the valid range (if the number is non-compact). As
such when creating a BigNum from scratch you should always use this unless you
absolutely need a raw constructor
Trait Implementations§
Source§impl<T> Add<BigNumBase<T>> for u64where
T: Base,
impl<T> Add<BigNumBase<T>> for u64where
T: Base,
Source§type Output = BigNumBase<T>
type Output = BigNumBase<T>
+
operator.Source§impl<T> Add for BigNumBase<T>where
T: Base,
impl<T> Add for BigNumBase<T>where
T: Base,
Source§impl<T> AddAssign<u64> for BigNumBase<T>where
T: Base,
impl<T> AddAssign<u64> for BigNumBase<T>where
T: Base,
Source§fn add_assign(&mut self, rhs: u64)
fn add_assign(&mut self, rhs: u64)
+=
operation. Read moreSource§impl<T> AddAssign for BigNumBase<T>where
T: Base,
impl<T> AddAssign for BigNumBase<T>where
T: Base,
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
+=
operation. Read moreSource§impl<T> Clone for BigNumBase<T>
impl<T> Clone for BigNumBase<T>
Source§fn clone(&self) -> BigNumBase<T>
fn clone(&self) -> BigNumBase<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<T> Debug for BigNumBase<T>
impl<T> Debug for BigNumBase<T>
Source§impl Display for BigNumBase<Decimal>
impl Display for BigNumBase<Decimal>
Source§impl<T> Div<BigNumBase<T>> for u64where
T: Base,
impl<T> Div<BigNumBase<T>> for u64where
T: Base,
Source§type Output = BigNumBase<T>
type Output = BigNumBase<T>
/
operator.Source§impl<T> Div for BigNumBase<T>where
T: Base,
impl<T> Div for BigNumBase<T>where
T: Base,
Source§impl<T> DivAssign<u64> for BigNumBase<T>where
T: Base,
impl<T> DivAssign<u64> for BigNumBase<T>where
T: Base,
Source§fn div_assign(&mut self, rhs: u64)
fn div_assign(&mut self, rhs: u64)
/=
operation. Read moreSource§impl<T> Mul<BigNumBase<T>> for u64where
T: Base,
impl<T> Mul<BigNumBase<T>> for u64where
T: Base,
Source§type Output = BigNumBase<T>
type Output = BigNumBase<T>
*
operator.Source§impl<T> Mul for BigNumBase<T>where
T: Base,
impl<T> Mul for BigNumBase<T>where
T: Base,
Source§impl<T> MulAssign<u64> for BigNumBase<T>where
T: Base,
impl<T> MulAssign<u64> for BigNumBase<T>where
T: Base,
Source§fn mul_assign(&mut self, rhs: u64)
fn mul_assign(&mut self, rhs: u64)
*=
operation. Read moreSource§impl<T> MulAssign for BigNumBase<T>where
T: Base,
impl<T> MulAssign for BigNumBase<T>where
T: Base,
Source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
*=
operation. Read moreSource§impl<T> Ord for BigNumBase<T>where
T: Base,
impl<T> Ord for BigNumBase<T>where
T: Base,
Source§impl<T> PartialEq for BigNumBase<T>where
T: Base,
impl<T> PartialEq for BigNumBase<T>where
T: Base,
Source§impl<T> PartialOrd for BigNumBase<T>where
T: Base,
impl<T> PartialOrd for BigNumBase<T>where
T: Base,
Source§impl<T> Sub<BigNumBase<T>> for u64where
T: Base,
impl<T> Sub<BigNumBase<T>> for u64where
T: Base,
Source§type Output = BigNumBase<T>
type Output = BigNumBase<T>
-
operator.Source§impl<T> Sub for BigNumBase<T>where
T: Base,
impl<T> Sub for BigNumBase<T>where
T: Base,
Source§impl<T> SubAssign<u64> for BigNumBase<T>where
T: Base,
impl<T> SubAssign<u64> for BigNumBase<T>where
T: Base,
Source§fn sub_assign(&mut self, rhs: u64)
fn sub_assign(&mut self, rhs: u64)
-=
operation. Read moreSource§impl<T> SubAssign for BigNumBase<T>where
T: Base,
impl<T> SubAssign for BigNumBase<T>where
T: Base,
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
-=
operation. Read more