Struct boostvoronoi::extended_exp_fpt::ExtendedExponentFpt [−][src]
Floating point type wrapper. Allows to extend exponent boundaries to the integer type range. This class does not handle division by zero, subnormal numbers or NaNs. Ported from the class extended_exponent_fpt in voronoi_ctypes.hpp
Implementations
impl ExtendedExponentFpt<f64>
[src]
pub fn new2(val: f64, exp: i32) -> Self
[src]
Constructor with value and exponent as arguments. The value of this number is ‘val_’ * 2^ ‘exp_’
let a = ExtendedExponentFpt::<f64>::new2(1.0, 12); approx::assert_ulps_eq!(a.d(), 4096.0);
pub fn is_pos(&self) -> bool
[src]
Is positive method. IMPORTANT!!!!! in the c++ boost voronoi implementation zero values can’t be positive.
let aa:f64 = 0_f64; let a = ExtendedExponentFpt::<f64>::from(aa); assert_eq!(a.is_pos(), false); let aa:f64 = -0_f64; let a = ExtendedExponentFpt::<f64>::from(aa); assert_eq!(a.is_pos(), false); let aa:f64 = f64::MIN_POSITIVE; let a = ExtendedExponentFpt::<f64>::from(aa); assert_eq!(a.is_pos(), aa.is_sign_positive());
pub fn is_neg(&self) -> bool
[src]
Is negative method. IMPORTANT!!!!! in the c++ boost voronoi implementation zero values can’t be negative.
let aa:f64 = 0_f64; let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(aa); assert_eq!(a.is_neg(), aa.is_sign_negative()); let aa:f64 = -0_f64; let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(aa); assert_eq!(a.is_neg(), false);
pub fn is_zero(&self) -> bool
[src]
Is zero method.
let aa:f64 = 0_f64; let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(aa); assert_eq!(a.is_zero(), aa.is_zero()); let aa:f64 = -0_f64; let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(aa); assert_eq!(a.is_zero(), aa.is_zero()); let aa:f64 = f64::MIN_POSITIVE; let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(aa); assert_eq!(a.is_zero(), aa.is_zero()); let aa:f64 = -f64::MIN_POSITIVE; let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(aa); assert_eq!(a.is_zero(), aa.is_zero());
pub fn sqrt(&self) -> Self
[src]
Square root method.
let aa:f64 = f64::MAX; let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(aa); approx::assert_ulps_eq!(a.d(), aa); let a = a.sqrt(); approx::assert_ulps_eq!(a.d(), aa.sqrt());
pub fn d(&self) -> f64
[src]
A to-float operation.
let aa:f64 = 1000000000.0; let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(aa); approx::assert_ulps_eq!(a.d(), aa); let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(-aa); approx::assert_ulps_eq!(a.d(), -aa);
pub fn val(&self) -> f64
[src]
pub fn exp(&self) -> i32
[src]
Trait Implementations
impl Add<ExtendedExponentFpt<f64>> for ExtendedExponentFpt<f64>
[src]
type Output = Self
The resulting type after applying the +
operator.
fn add(self, that: Self) -> Self
[src]
let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(2_f64); approx::assert_ulps_eq!(a.d(), 1_f64); approx::assert_ulps_eq!(b.d(), 2_f64); let c = a + b; approx::assert_ulps_eq!(c.d(), 3_f64); let c = c + b; approx::assert_ulps_eq!(c.d(), 5_f64); let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1000000000_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(2000000000_f64); approx::assert_ulps_eq!(a.d(), 1000000000_f64); approx::assert_ulps_eq!(b.d(), 2000000000_f64); let c = a + b; approx::assert_ulps_eq!(c.d(), 3000000000_f64);
impl AddAssign<ExtendedExponentFpt<f64>> for ExtendedExponentFpt<f64>
[src]
fn add_assign(&mut self, that: Self)
[src]
let mut a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(2_f64); approx::assert_ulps_eq!(a.d(), 1_f64); approx::assert_ulps_eq!(b.d(), 2_f64); a += b; approx::assert_ulps_eq!(a.d(), 3_f64); a += b; approx::assert_ulps_eq!(a.d(), 5_f64); let mut a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1000000000_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(2000000000_f64); approx::assert_ulps_eq!(a.d(), 1000000000_f64); approx::assert_ulps_eq!(b.d(), 2000000000_f64); a += b; approx::assert_ulps_eq!(a.d(), 3000000000_f64);
impl<F: Clone> Clone for ExtendedExponentFpt<F> where
F: NumCast + Float + Display + Copy + Debug + Neg<Output = F>,
[src]
F: NumCast + Float + Display + Copy + Debug + Neg<Output = F>,
fn clone(&self) -> ExtendedExponentFpt<F>
[src]
pub fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl<F: Copy> Copy for ExtendedExponentFpt<F> where
F: NumCast + Float + Display + Copy + Debug + Neg<Output = F>,
[src]
F: NumCast + Float + Display + Copy + Debug + Neg<Output = F>,
impl Debug for ExtendedExponentFpt<f64>
[src]
impl Div<ExtendedExponentFpt<f64>> for ExtendedExponentFpt<f64>
[src]
type Output = Self
The resulting type after applying the /
operator.
fn div(self, that: Self) -> Self
[src]
let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(2_f64); approx::assert_ulps_eq!(a.d(), 1_f64); approx::assert_ulps_eq!(b.d(), 2_f64); let c = a / b; approx::assert_ulps_eq!(c.d(), 1.0/2.0); let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(2000000000_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(-2000000000_f64); approx::assert_ulps_eq!(a.d(), 2000000000_f64); approx::assert_ulps_eq!(b.d(), -2000000000_f64); let c = a / b; approx::assert_ulps_eq!(c.d(), -1f64);
impl DivAssign<ExtendedExponentFpt<f64>> for ExtendedExponentFpt<f64>
[src]
fn div_assign(&mut self, that: Self)
[src]
let mut a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(2_f64); approx::assert_ulps_eq!(a.d(), 1_f64); approx::assert_ulps_eq!(b.d(), 2_f64); a /= b; approx::assert_ulps_eq!(a.d(), 1.0/2.0); let mut a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(2000000000_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(-2000000000_f64); approx::assert_ulps_eq!(a.d(), 2000000000_f64); approx::assert_ulps_eq!(b.d(), -2000000000_f64); a /= b; approx::assert_ulps_eq!(a.d(), -1f64);
impl From<&'_ ExtendedInt> for ExtendedExponentFpt<f64>
[src]
fn from(that: &ExtendedInt) -> Self
[src]
converts to ExtendedExponentFpt::
let aa = 41232131332_f64; let mut a = ExtendedInt::from(aa as i64); let e = ExtendedExponentFpt::from(&a); approx::assert_ulps_eq!(e.d(), aa);
impl From<f64> for ExtendedExponentFpt<f64>
[src]
fn from(that: f64) -> ExtendedExponentFpt<f64>
[src]
converts from f64 to ExtendedExponentFpt
let f1 = 345345345453_f64; let e = ExtendedExponentFpt::from(f1); let f2 = f64::from(&e); approx::assert_ulps_eq!(f1, f2);
impl Mul<ExtendedExponentFpt<f64>> for ExtendedExponentFpt<f64>
[src]
type Output = Self
The resulting type after applying the *
operator.
fn mul(self, that: Self) -> Self
[src]
let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(2_f64); approx::assert_ulps_eq!(a.d(), 1_f64); approx::assert_ulps_eq!(b.d(), 2_f64); let c = a * b; approx::assert_ulps_eq!(c.d(), 2_f64); let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1000000000_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(2000000000_f64); approx::assert_ulps_eq!(a.d(), 1000000000_f64); approx::assert_ulps_eq!(b.d(), 2000000000_f64); let c = a * b; approx::assert_ulps_eq!(c.d(), 1000000000_f64*2000000000_f64);
impl Mul<f64> for ExtendedExponentFpt<f64>
[src]
type Output = Self
The resulting type after applying the *
operator.
fn mul(self, that: f64) -> Self
[src]
let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(7_f64); let b = 2_f64; approx::assert_ulps_eq!(a.d(), 7_f64); approx::assert_ulps_eq!(b, 2_f64); let c = a * b; approx::assert_ulps_eq!(c.d(), 7_f64*2_f64); let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1234567890_f64); let b = 2000000000_f64; approx::assert_ulps_eq!(a.d(), 1234567890_f64); approx::assert_ulps_eq!(b, 2000000000_f64); let c = a * b; approx::assert_ulps_eq!(c.d(), 1234567890_f64*2000000000_f64);
impl MulAssign<ExtendedExponentFpt<f64>> for ExtendedExponentFpt<f64>
[src]
fn mul_assign(&mut self, that: Self)
[src]
let mut a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(2_f64); approx::assert_ulps_eq!(a.d(), 1_f64); approx::assert_ulps_eq!(b.d(), 2_f64); a *= b; approx::assert_ulps_eq!(a.d(), 2_f64); let mut a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1000000000_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(2000000000_f64); approx::assert_ulps_eq!(a.d(), 1000000000_f64); approx::assert_ulps_eq!(b.d(), 2000000000_f64); a *= b; approx::assert_ulps_eq!(a.d(), 1000000000_f64*2000000000_f64);
impl Neg for ExtendedExponentFpt<f64>
[src]
type Output = Self
The resulting type after applying the -
operator.
fn neg(self) -> Self
[src]
let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1_f64); approx::assert_ulps_eq!(a.d(), 1_f64); let c = -a; approx::assert_ulps_eq!(c.d(), -1_f64); let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1000000000_f64); approx::assert_ulps_eq!(a.d(), 1000000000_f64); let c = -a; approx::assert_ulps_eq!(c.d(), -1000000000_f64);
impl Sub<ExtendedExponentFpt<f64>> for ExtendedExponentFpt<f64>
[src]
type Output = Self
The resulting type after applying the -
operator.
fn sub(self, that: Self) -> Self
[src]
let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(-2_f64); approx::assert_ulps_eq!(a.d(), 1_f64); approx::assert_ulps_eq!(b.d(), -2_f64); let c = a - b; approx::assert_ulps_eq!(c.d(), 3_f64); let c = c - b; approx::assert_ulps_eq!(c.d(), 5_f64); let a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1000000000_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(-3000000000_f64); approx::assert_ulps_eq!(a.d(), 1000000000_f64); approx::assert_ulps_eq!(b.d(), -3000000000_f64); let c = a - b; approx::assert_ulps_eq!(c.d(), 1000000000_f64-(-3000000000.0));
impl SubAssign<ExtendedExponentFpt<f64>> for ExtendedExponentFpt<f64>
[src]
fn sub_assign(&mut self, that: Self)
[src]
let mut a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(-2_f64); approx::assert_ulps_eq!(a.d(), 1_f64); approx::assert_ulps_eq!(b.d(), -2_f64); a -= b; approx::assert_ulps_eq!(a.d(), 3_f64); a -= b; approx::assert_ulps_eq!(a.d(), 5_f64); let mut a = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(1000000000_f64); let b = extended_exp_fpt::ExtendedExponentFpt::<f64>::from(-3000000000_f64); approx::assert_ulps_eq!(a.d(), 1000000000_f64); approx::assert_ulps_eq!(b.d(), -3000000000_f64); a -= b; approx::assert_ulps_eq!(a.d(), 1000000000_f64-(-3000000000.0));
Auto Trait Implementations
impl<F> RefUnwindSafe for ExtendedExponentFpt<F> where
F: RefUnwindSafe,
F: RefUnwindSafe,
impl<F> Send for ExtendedExponentFpt<F> where
F: Send,
F: Send,
impl<F> Sync for ExtendedExponentFpt<F> where
F: Sync,
F: Sync,
impl<F> Unpin for ExtendedExponentFpt<F> where
F: Unpin,
F: Unpin,
impl<F> UnwindSafe for ExtendedExponentFpt<F> where
F: UnwindSafe,
F: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,