pub struct UnguardedF64(/* private fields */);Expand description
Represents a checked floating-point number that ensures it is neither NaN nor infinite.
§Example
use floatguard::{UnguardedF64, FloatError, GuardedF64};
let unchecked_f64 = UnguardedF64::new(1.0);
assert_eq!((unchecked_f64 + 1.0).check(), GuardedF64::new(2.0));
assert_eq!(unchecked_f64.check(), GuardedF64::new(1.0));
assert_eq!((unchecked_f64 - f64::INFINITY).check(), Err(FloatError::Infinity));Implementations§
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const RADIX: u32 = 2u32
pub const RADIX: u32 = 2u32
The radix or base of the internal representation of f64.
See: f64::RADIX
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const MANTISSA_DIGITS: u32 = 53u32
pub const MANTISSA_DIGITS: u32 = 53u32
Number of significant digits in base 2.
See: f64::MANTISSA_DIGITS.
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const DIGITS: u32 = 15u32
pub const DIGITS: u32 = 15u32
Approximate number of significant digits in base 10.
See: f64::DIGITS.
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const EPSILON: GuardedF64
pub const EPSILON: GuardedF64
The difference between 1.0 and the next larger representable number. Equal to
21 − MANTISSA_DIGITS.
See: f64::EPSILON
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const MIN: GuardedF64
pub const MIN: GuardedF64
Smallest finite f64 value.
See: f64::MIN
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const MIN_POSITIVE: GuardedF64
pub const MIN_POSITIVE: GuardedF64
Smallest positive normal f64 value.
See: f64::MIN_POSITIVE
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const MAX: GuardedF64
pub const MAX: GuardedF64
Largest finite f64 value.
See: f64::MAX
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const MIN_EXP: i32 = -1_021i32
pub const MIN_EXP: i32 = -1_021i32
Minimum possible normal power of 2 exponent.
See: f64::MIN_EXP
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const MAX_EXP: i32 = 1_024i32
pub const MAX_EXP: i32 = 1_024i32
Maximum possible normal power of 2 exponent.
See: f64::MAX_EXP
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const MIN_10_EXP: i32 = -307i32
pub const MIN_10_EXP: i32 = -307i32
Minimum possible normal power of 10 exponent.
See: f64::MIN_10_EXP
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const MAX_10_EXP: i32 = 308i32
pub const MAX_10_EXP: i32 = 308i32
Maximum possible normal power of 10 exponent.
See: f64::MAX_10_EXP
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const PI: GuardedF64
pub const PI: GuardedF64
Archimedes’ constant (π)
See: std::f64::consts::PI
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const TAU: GuardedF64
pub const TAU: GuardedF64
The full circle constant (τ = 2π)
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const FRAC_PI_2: GuardedF64
pub const FRAC_PI_2: GuardedF64
π/2
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const FRAC_PI_3: GuardedF64
pub const FRAC_PI_3: GuardedF64
π/3
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const FRAC_PI_4: GuardedF64
pub const FRAC_PI_4: GuardedF64
π/4
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const FRAC_PI_6: GuardedF64
pub const FRAC_PI_6: GuardedF64
π/6
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const FRAC_PI_8: GuardedF64
pub const FRAC_PI_8: GuardedF64
π/8
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const FRAC_1_PI: GuardedF64
pub const FRAC_1_PI: GuardedF64
1/π
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const FRAC_2_PI: GuardedF64
pub const FRAC_2_PI: GuardedF64
2/π
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const FRAC_2_SQRT_PI: GuardedF64
pub const FRAC_2_SQRT_PI: GuardedF64
1/√π
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const SQRT_2: GuardedF64
pub const SQRT_2: GuardedF64
√2
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const FRAC_1_SQRT_2: GuardedF64
pub const FRAC_1_SQRT_2: GuardedF64
1/√2
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const E: GuardedF64
pub const E: GuardedF64
Euler’s number (e)
See: std::f64::consts::E
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const LOG2_E: GuardedF64
pub const LOG2_E: GuardedF64
log2(e)
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const LOG2_10: GuardedF64
pub const LOG2_10: GuardedF64
log2(10)
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const LOG10_2: GuardedF64
pub const LOG10_2: GuardedF64
log10(2)
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const LOG10_E: GuardedF64
pub const LOG10_E: GuardedF64
log10(e)
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const LN_2: GuardedF64
pub const LN_2: GuardedF64
ln(2)
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const LN_10: GuardedF64
pub const LN_10: GuardedF64
ln(10)
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const fn check(self) -> Result<GuardedF64, FloatError>
pub const fn check(self) -> Result<GuardedF64, FloatError>
Checks if the UnguardedF64 value is valid (finite).
§Returns
Returns a GuardedF64 if the value is valid (finite), otherwise returns an error.
§Errors
Returns FloatError if the value is NaN or infinite.
§Example
use floatguard::{UnguardedF64, FloatError, GuardedF64};
let unchecked_f64 = UnguardedF64::new(1.0);
assert_eq!(unchecked_f64.check(), GuardedF64::new(1.0));
let invalid_f64 = UnguardedF64::new(f64::NAN);
assert_eq!(invalid_f64.check(), Err(FloatError::NaN));
let inf_f64 = UnguardedF64::new(f64::INFINITY);
assert_eq!(inf_f64.check(), Err(FloatError::Infinity));
let neg_inf_f64 = UnguardedF64::new(f64::NEG_INFINITY);
assert_eq!(neg_inf_f64.check(), Err(FloatError::Infinity));Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const fn abs(self) -> Self
pub const fn abs(self) -> Self
Computes the absolute value of self. GuardedF64::abs returns a GuardedF64 type because
any value that is not NaN or infinite is guaranteed to return a valid value.
See: f64::abs
§Examples
use floatguard::{GuardedF64, UnguardedF64};
let checked = GuardedF64::new(3.5_f64).unwrap();
assert_eq!(checked.abs(), 3.5_f64);
let unchecked = UnguardedF64::new(-3.5_f64);
assert_eq!(unchecked.abs().check(), GuardedF64::new(3.5_f64));Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const fn signum(self) -> Self
pub const fn signum(self) -> Self
Returns a number that represents the sign of self. GuardedF64::signum returns a
GuardedF64 type because any value that is not NaN or infinite is guaranteed to return
a valid value.
See: f64::signum
§Examples
use floatguard::{GuardedF64, UnguardedF64};
let pos = GuardedF64::new(3.5_f64).unwrap();
let neg = UnguardedF64::new(-3.5_f64);
assert_eq!(pos.signum(), GuardedF64::new(1.0).unwrap());
assert_eq!(neg.signum().check(), GuardedF64::new(-1.0));Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn sqrt(self) -> UnguardedF64
pub fn sqrt(self) -> UnguardedF64
Returns the square root of self.
See: f64::sqrt
§Examples
use floatguard::{GuardedF64, FloatError, UnguardedF64};
let positive = GuardedF64::new(4.0_f64).unwrap();
let negative = GuardedF64::new(-4.0_f64).unwrap();
let negative_zero = UnguardedF64::new(-0.0_f64);
assert_eq!(positive.sqrt().check(), GuardedF64::new(2.0));
assert_eq!(negative.sqrt().check(), Err(FloatError::NaN));
assert_eq!(negative_zero.sqrt().check(), GuardedF64::new(-0.0));Source§impl UnguardedF64
impl UnguardedF64
Sourcepub const fn recip(self) -> UnguardedF64
pub const fn recip(self) -> UnguardedF64
Takes the reciprocal (inverse) of self, 1/x where x is self. This returns an
UncheckedF64 because CheckedF64::new(0.0).unwrap().recip() is invalid.
See: f64::recip
§Examples
use floatguard::{GuardedF64, UnguardedF64};
let x = UnguardedF64::new(2.0_f64);
let abs_difference = (x.recip() - (1.0 / x)).abs().check().unwrap();
assert!(abs_difference < GuardedF64::EPSILON);Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn exp(self) -> UnguardedF64
pub fn exp(self) -> UnguardedF64
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn ln(self) -> UnguardedF64
pub fn ln(self) -> UnguardedF64
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn log2(self) -> UnguardedF64
pub fn log2(self) -> UnguardedF64
Returns the base-2 logarithm of a number, log2(self).
See: f64::log2
§Examples
use floatguard::UnguardedF64;
let two = UnguardedF64::new(2.0_f64);
let abs_difference = (two.log2() - 1.0).abs().check().unwrap();
assert!(abs_difference < 1e-10);
let two = two.check().unwrap();
let abs_difference = (two.log2() - 1.0).abs().check().unwrap();
assert!(abs_difference < 1e-10);Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn log10(self) -> UnguardedF64
pub fn log10(self) -> UnguardedF64
Returns the base-10 logarithm of a number, log10(self).
See: f64::log10
§Examples
use floatguard::UnguardedF64;
let ten = UnguardedF64::new(10.0_f64);
let abs_difference = (ten.log10() - 1.0).abs().check().unwrap();
assert!(abs_difference < 1e-10);
let ten = ten.check().unwrap();
let abs_difference = (ten.log10() - 1.0).abs().check().unwrap();
assert!(abs_difference < 1e-10);Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn log(self, base: impl Into<UnguardedF64>) -> UnguardedF64
pub fn log(self, base: impl Into<UnguardedF64>) -> UnguardedF64
Returns the logarithm of a number with a specified base, log(self, base).
See: f64::log
§Arguments
base - The base of the logarithm.
§Examples
use floatguard::UnguardedF64;
let two = UnguardedF64::new(2.0_f64);
let eight = UnguardedF64::new(8.0_f64);
// log(8, 2) == 3
let abs_difference = (eight.log(two) - 3.0).abs().check().unwrap();
assert!(abs_difference < 1e-10);Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn powi(self, power: i32) -> UnguardedF64
pub fn powi(self, power: i32) -> UnguardedF64
Raises a number to an integer power.
See: f64::powi
§Examples
use floatguard::{GuardedF64, UnguardedF64};
let x = UnguardedF64::new(2.0_f64);
let abs_difference = (x.powi(2) - (x * x)).abs().check().unwrap();
assert!(abs_difference <= GuardedF64::EPSILON);
assert!(UnguardedF64::new(f64::NAN).powi(2).check().is_err());Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn powf(self, power: impl Into<UnguardedF64>) -> UnguardedF64
pub fn powf(self, power: impl Into<UnguardedF64>) -> UnguardedF64
Raises a number to a floating-point power.
See: f64::powf
§Examples
use floatguard::{GuardedF64, UnguardedF64};
let x = UnguardedF64::new(2.0_f64);
let cubed = UnguardedF64::new(3.0);
let abs_difference = (x.powf(cubed) - (x * x * x)).abs().check().unwrap();
assert!(abs_difference <= GuardedF64::EPSILON);
let invalid = UnguardedF64::new(f64::NAN);
assert!(invalid.powf(x).check().is_err());Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn sin(self) -> UnguardedF64
pub fn sin(self) -> UnguardedF64
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn asin(self) -> UnguardedF64
pub fn asin(self) -> UnguardedF64
Computes the arcsine of a number. Return value is in radians in the range [-π/2, π/2] or invalid if the number is outside the range [-1, 1].
See: f64::asin
§Examples
use floatguard::GuardedF64;
let f = GuardedF64::FRAC_PI_2;
// asin(sin(pi/2))
let abs_difference = (f.sin().asin() - GuardedF64::FRAC_PI_2).abs().check().unwrap();
assert!(abs_difference < 1e-10);Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn sinh(self) -> UnguardedF64
pub fn sinh(self) -> UnguardedF64
Hyperbolic sine function.
See: f64::sinh
§Examples
use floatguard::GuardedF64;
let e = GuardedF64::E;
let x = 1.0_f64;
let f = x.sinh();
// Solving sinh() at 1 gives `(e^2-1)/(2e)`
let g = ((e * e) - 1.0) / (2.0 * e);
let abs_difference = (f - g).abs().check().unwrap();
assert!(abs_difference < 1e-10);Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn asinh(self) -> UnguardedF64
pub fn asinh(self) -> UnguardedF64
Inverse hyperbolic sine function.
See: f64::asinh
§Examples
use floatguard::UnguardedF64;
let x = UnguardedF64::new(1.0_f64);
let f = x.sinh().asinh();
let abs_difference = (f - x).abs().check().unwrap();
assert!(abs_difference < 1.0e-10);Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn cos(self) -> UnguardedF64
pub fn cos(self) -> UnguardedF64
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn acos(self) -> UnguardedF64
pub fn acos(self) -> UnguardedF64
Computes the arccosine of a number. Return value is in radians in the range [0, π], if the value is in the range [-1, 1].
See: f64::acos
§Examples
use floatguard::GuardedF64;
let f = GuardedF64::FRAC_PI_4;
// acos(cos(pi/4))
let abs_difference = (f.cos().acos() - GuardedF64::FRAC_PI_4).abs().check().unwrap();
assert!(abs_difference < 1e-10);Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn cosh(self) -> UnguardedF64
pub fn cosh(self) -> UnguardedF64
Hyperbolic cosine function.
See: f64::cosh
§Examples
use floatguard::UnguardedF64;
let e = UnguardedF64::E;
let x = UnguardedF64::new(1.0_f64);
let f = x.cosh();
// Solving cosh() at 1 gives this result
let g = ((e * e) + 1.0) / (2.0 * e);
let abs_difference = (f - g).abs().check().unwrap();
// Same result
assert!(abs_difference < 1e-10);Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn acosh(self) -> UnguardedF64
pub fn acosh(self) -> UnguardedF64
Inverse hyperbolic cosine function.
See: f64::acosh
§Examples
use floatguard::UnguardedF64;
let x = UnguardedF64::new(1.0);
let f = x.cosh().acosh();
let abs_difference = (f - x).abs().check().unwrap();
assert!(abs_difference < 1.0e-10);Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn sin_cos(self) -> (UnguardedF64, UnguardedF64)
pub fn sin_cos(self) -> (UnguardedF64, UnguardedF64)
Simultaneously computes the sine and cosine of a number, x. Returns (sin(x), cos(x)).
See: f64::sin_cos
§Examples
use floatguard::GuardedF64;
let x = GuardedF64::FRAC_PI_4;
let f = x.sin_cos();
let abs_difference_0 = (f.0 - x.sin()).abs().check().unwrap();
let abs_difference_1 = (f.1 - x.cos()).abs().check().unwrap();
assert!(abs_difference_0 < 1e-10);
assert!(abs_difference_1 < 1e-10);Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn tan(self) -> UnguardedF64
pub fn tan(self) -> UnguardedF64
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn atan(self) -> UnguardedF64
pub fn atan(self) -> UnguardedF64
Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn tanh(self) -> UnguardedF64
pub fn tanh(self) -> UnguardedF64
Computes the hyperbolic tangent of a number.
See: f64::tanh
§Examples
use floatguard::GuardedF64;
let x = GuardedF64::new(1.0_f64).unwrap();
let f = x.tanh();
// tanh(1) is approximately 0.7615941559557649
let abs_difference = (f - 0.7615941559557649).abs().check().unwrap();
assert!(abs_difference < 1e-10);Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn atanh(self) -> UnguardedF64
pub fn atanh(self) -> UnguardedF64
Computes the inverse hyperbolic tangent of a number. Return value is in the range (-∞, ∞) for inputs in the range (-1, 1).
See: f64::atanh
§Examples
use floatguard::UnguardedF64;
let x = UnguardedF64::new(0.5_f64);
let f = x.tanh().atanh();
let abs_difference = (f - x).abs().check().unwrap();
assert!(abs_difference < 1e-10);Source§impl UnguardedF64
impl UnguardedF64
Sourcepub fn atan2(self, other: impl Into<UnguardedF64>) -> UnguardedF64
pub fn atan2(self, other: impl Into<UnguardedF64>) -> UnguardedF64
Computes the arctangent of self divided by other.
See: f64::atan2
§Arguments
other - The GuardedF64 value to divide self by.
§Returns
Returns a new GuardedF64 instance containing the result of the arctangent operation.
§Examples
use floatguard::UnguardedF64;
let a = UnguardedF64::new(1.0);
let b = UnguardedF64::new(2.0);
assert_eq!(f64::try_from(a.atan2(b)), Ok(0.4636476090008061)); // atan2(1.0, 2.0)
let invalid = UnguardedF64::new(f64::NAN);
assert!(invalid.atan2(a).check().is_err());Trait Implementations§
Source§impl Add<&GuardedF64> for &UnguardedF64
impl Add<&GuardedF64> for &UnguardedF64
Source§fn add(self, rhs: &GuardedF64) -> Self::Output
fn add(self, rhs: &GuardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<&GuardedF64> for UnguardedF64
impl Add<&GuardedF64> for UnguardedF64
Source§fn add(self, rhs: &GuardedF64) -> Self::Output
fn add(self, rhs: &GuardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<&UnguardedF64> for &GuardedF64
impl Add<&UnguardedF64> for &GuardedF64
Source§fn add(self, rhs: &UnguardedF64) -> Self::Output
fn add(self, rhs: &UnguardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<&UnguardedF64> for &UnguardedF64
impl Add<&UnguardedF64> for &UnguardedF64
Source§fn add(self, rhs: &UnguardedF64) -> Self::Output
fn add(self, rhs: &UnguardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<&UnguardedF64> for &f64
impl Add<&UnguardedF64> for &f64
Source§fn add(self, rhs: &UnguardedF64) -> Self::Output
fn add(self, rhs: &UnguardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<&UnguardedF64> for GuardedF64
impl Add<&UnguardedF64> for GuardedF64
Source§fn add(self, rhs: &UnguardedF64) -> Self::Output
fn add(self, rhs: &UnguardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<&UnguardedF64> for UnguardedF64
impl Add<&UnguardedF64> for UnguardedF64
Source§fn add(self, rhs: &UnguardedF64) -> Self::Output
fn add(self, rhs: &UnguardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<&UnguardedF64> for f64
impl Add<&UnguardedF64> for f64
Source§fn add(self, rhs: &UnguardedF64) -> Self::Output
fn add(self, rhs: &UnguardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<&f64> for &UnguardedF64
impl Add<&f64> for &UnguardedF64
Source§fn add(self, rhs: &f64) -> Self::Output
fn add(self, rhs: &f64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<&f64> for UnguardedF64
impl Add<&f64> for UnguardedF64
Source§fn add(self, rhs: &f64) -> Self::Output
fn add(self, rhs: &f64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<GuardedF64> for &UnguardedF64
impl Add<GuardedF64> for &UnguardedF64
Source§fn add(self, rhs: GuardedF64) -> Self::Output
fn add(self, rhs: GuardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<GuardedF64> for UnguardedF64
impl Add<GuardedF64> for UnguardedF64
Source§fn add(self, rhs: GuardedF64) -> Self::Output
fn add(self, rhs: GuardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<UnguardedF64> for &GuardedF64
impl Add<UnguardedF64> for &GuardedF64
Source§fn add(self, rhs: UnguardedF64) -> Self::Output
fn add(self, rhs: UnguardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<UnguardedF64> for &UnguardedF64
impl Add<UnguardedF64> for &UnguardedF64
Source§fn add(self, rhs: UnguardedF64) -> Self::Output
fn add(self, rhs: UnguardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<UnguardedF64> for &f64
impl Add<UnguardedF64> for &f64
Source§fn add(self, rhs: UnguardedF64) -> Self::Output
fn add(self, rhs: UnguardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<UnguardedF64> for GuardedF64
impl Add<UnguardedF64> for GuardedF64
Source§fn add(self, rhs: UnguardedF64) -> Self::Output
fn add(self, rhs: UnguardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<UnguardedF64> for f64
impl Add<UnguardedF64> for f64
Source§fn add(self, rhs: UnguardedF64) -> Self::Output
fn add(self, rhs: UnguardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<f64> for &UnguardedF64
impl Add<f64> for &UnguardedF64
Source§fn add(self, rhs: f64) -> Self::Output
fn add(self, rhs: f64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add<f64> for UnguardedF64
impl Add<f64> for UnguardedF64
Source§fn add(self, rhs: f64) -> Self::Output
fn add(self, rhs: f64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl Add for UnguardedF64
impl Add for UnguardedF64
Source§fn add(self, rhs: UnguardedF64) -> Self::Output
fn add(self, rhs: UnguardedF64) -> Self::Output
Adds two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!((value1 + value2).check().unwrap(), 5.0);
assert_eq!((value1 + f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
+ operator.Source§impl<T> AddAssign<T> for UnguardedF64where
T: Into<Self>,
impl<T> AddAssign<T> for UnguardedF64where
T: Into<Self>,
Source§fn add_assign(&mut self, rhs: T)
fn add_assign(&mut self, rhs: T)
Assigns the result of adding another UnguardedF64 to this one.
§Example
use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(1.0);
let b = UnguardedF64::from(2.0);
a += b;
assert_eq!(a.check(), GuardedF64::new(3.0));use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(1.0);
let b = 2.0;
a += b;
assert_eq!(a.check(), GuardedF64::new(3.0));use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(1.0);
let b = GuardedF64::new(2.0).unwrap();
a += b;
assert_eq!(a.check(), GuardedF64::new(3.0));Source§impl Clone for UnguardedF64
impl Clone for UnguardedF64
Source§fn clone(&self) -> UnguardedF64
fn clone(&self) -> UnguardedF64
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for UnguardedF64
impl Debug for UnguardedF64
Source§impl Default for UnguardedF64
impl Default for UnguardedF64
Source§fn default() -> UnguardedF64
fn default() -> UnguardedF64
Source§impl Display for UnguardedF64
impl Display for UnguardedF64
Source§impl Div<&GuardedF64> for &UnguardedF64
impl Div<&GuardedF64> for &UnguardedF64
Source§fn div(self, rhs: &GuardedF64) -> Self::Output
fn div(self, rhs: &GuardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<&GuardedF64> for UnguardedF64
impl Div<&GuardedF64> for UnguardedF64
Source§fn div(self, rhs: &GuardedF64) -> Self::Output
fn div(self, rhs: &GuardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<&UnguardedF64> for &GuardedF64
impl Div<&UnguardedF64> for &GuardedF64
Source§fn div(self, rhs: &UnguardedF64) -> Self::Output
fn div(self, rhs: &UnguardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<&UnguardedF64> for &UnguardedF64
impl Div<&UnguardedF64> for &UnguardedF64
Source§fn div(self, rhs: &UnguardedF64) -> Self::Output
fn div(self, rhs: &UnguardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<&UnguardedF64> for &f64
impl Div<&UnguardedF64> for &f64
Source§fn div(self, rhs: &UnguardedF64) -> Self::Output
fn div(self, rhs: &UnguardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<&UnguardedF64> for GuardedF64
impl Div<&UnguardedF64> for GuardedF64
Source§fn div(self, rhs: &UnguardedF64) -> Self::Output
fn div(self, rhs: &UnguardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<&UnguardedF64> for UnguardedF64
impl Div<&UnguardedF64> for UnguardedF64
Source§fn div(self, rhs: &UnguardedF64) -> Self::Output
fn div(self, rhs: &UnguardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<&UnguardedF64> for f64
impl Div<&UnguardedF64> for f64
Source§fn div(self, rhs: &UnguardedF64) -> Self::Output
fn div(self, rhs: &UnguardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<&f64> for &UnguardedF64
impl Div<&f64> for &UnguardedF64
Source§fn div(self, rhs: &f64) -> Self::Output
fn div(self, rhs: &f64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<&f64> for UnguardedF64
impl Div<&f64> for UnguardedF64
Source§fn div(self, rhs: &f64) -> Self::Output
fn div(self, rhs: &f64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<GuardedF64> for &UnguardedF64
impl Div<GuardedF64> for &UnguardedF64
Source§fn div(self, rhs: GuardedF64) -> Self::Output
fn div(self, rhs: GuardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<GuardedF64> for UnguardedF64
impl Div<GuardedF64> for UnguardedF64
Source§fn div(self, rhs: GuardedF64) -> Self::Output
fn div(self, rhs: GuardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<UnguardedF64> for &GuardedF64
impl Div<UnguardedF64> for &GuardedF64
Source§fn div(self, rhs: UnguardedF64) -> Self::Output
fn div(self, rhs: UnguardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<UnguardedF64> for &UnguardedF64
impl Div<UnguardedF64> for &UnguardedF64
Source§fn div(self, rhs: UnguardedF64) -> Self::Output
fn div(self, rhs: UnguardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<UnguardedF64> for &f64
impl Div<UnguardedF64> for &f64
Source§fn div(self, rhs: UnguardedF64) -> Self::Output
fn div(self, rhs: UnguardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<UnguardedF64> for GuardedF64
impl Div<UnguardedF64> for GuardedF64
Source§fn div(self, rhs: UnguardedF64) -> Self::Output
fn div(self, rhs: UnguardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<UnguardedF64> for f64
impl Div<UnguardedF64> for f64
Source§fn div(self, rhs: UnguardedF64) -> Self::Output
fn div(self, rhs: UnguardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<f64> for &UnguardedF64
impl Div<f64> for &UnguardedF64
Source§fn div(self, rhs: f64) -> Self::Output
fn div(self, rhs: f64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div<f64> for UnguardedF64
impl Div<f64> for UnguardedF64
Source§fn div(self, rhs: f64) -> Self::Output
fn div(self, rhs: f64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl Div for UnguardedF64
impl Div for UnguardedF64
Source§fn div(self, rhs: UnguardedF64) -> Self::Output
fn div(self, rhs: UnguardedF64) -> Self::Output
Divides one GuardedF64 value by another or a f64 by a GuardedF64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(6.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 / value2), Ok(2.0));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / 0.0).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 / f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN / value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY / value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 / f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 / value2).check(), Err(FloatError::NaN));
assert_eq!((value2 / value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
/ operator.Source§impl<T> DivAssign<T> for UnguardedF64where
T: Into<Self>,
impl<T> DivAssign<T> for UnguardedF64where
T: Into<Self>,
Source§fn div_assign(&mut self, rhs: T)
fn div_assign(&mut self, rhs: T)
Assigns the result of dividing this UnguardedF64 by another.
§Example
use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(6.0);
let b = UnguardedF64::from(3.0);
a /= b;
assert_eq!(a.check(), GuardedF64::new(2.0));use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(6.0);
let b = 3.0;
a /= b;
assert_eq!(a.check(), GuardedF64::new(2.0));use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(6.0);
let b = GuardedF64::new(3.0).unwrap();
a /= b;
assert_eq!(a.check(), GuardedF64::new(2.0));Source§impl From<GuardedF64> for UnguardedF64
impl From<GuardedF64> for UnguardedF64
Source§fn from(value: GuardedF64) -> Self
fn from(value: GuardedF64) -> Self
Converts a GuardedF64 into an UnguardedF64.
§Returns
Returns a new UnguardedF64 instance containing the inner f64 value.
§Example
use floatguard::{UnguardedF64, GuardedF64};
let checked_f64 = GuardedF64::new(3.14).unwrap();
let unchecked_f64 = UnguardedF64::from(checked_f64);
assert_eq!(unchecked_f64.check(), GuardedF64::new(3.14));Source§impl From<f64> for UnguardedF64
impl From<f64> for UnguardedF64
Source§fn from(value: f64) -> Self
fn from(value: f64) -> Self
Converts an f64 into a GuardedF64.
§Returns
Returns a GuardedF64 if the value is valid (finite), otherwise returns an error.
§Example
use floatguard::{UnguardedF64, GuardedF64, FloatError};
assert_eq!(UnguardedF64::from(3.14).check(), GuardedF64::new(3.14));
assert_eq!(UnguardedF64::from(f64::NAN).check(), Err(FloatError::NaN));Source§impl Mul<&GuardedF64> for &UnguardedF64
impl Mul<&GuardedF64> for &UnguardedF64
Source§fn mul(self, rhs: &GuardedF64) -> Self::Output
fn mul(self, rhs: &GuardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<&GuardedF64> for UnguardedF64
impl Mul<&GuardedF64> for UnguardedF64
Source§fn mul(self, rhs: &GuardedF64) -> Self::Output
fn mul(self, rhs: &GuardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<&UnguardedF64> for &GuardedF64
impl Mul<&UnguardedF64> for &GuardedF64
Source§fn mul(self, rhs: &UnguardedF64) -> Self::Output
fn mul(self, rhs: &UnguardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<&UnguardedF64> for &UnguardedF64
impl Mul<&UnguardedF64> for &UnguardedF64
Source§fn mul(self, rhs: &UnguardedF64) -> Self::Output
fn mul(self, rhs: &UnguardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<&UnguardedF64> for &f64
impl Mul<&UnguardedF64> for &f64
Source§fn mul(self, rhs: &UnguardedF64) -> Self::Output
fn mul(self, rhs: &UnguardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<&UnguardedF64> for GuardedF64
impl Mul<&UnguardedF64> for GuardedF64
Source§fn mul(self, rhs: &UnguardedF64) -> Self::Output
fn mul(self, rhs: &UnguardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<&UnguardedF64> for UnguardedF64
impl Mul<&UnguardedF64> for UnguardedF64
Source§fn mul(self, rhs: &UnguardedF64) -> Self::Output
fn mul(self, rhs: &UnguardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<&UnguardedF64> for f64
impl Mul<&UnguardedF64> for f64
Source§fn mul(self, rhs: &UnguardedF64) -> Self::Output
fn mul(self, rhs: &UnguardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<&f64> for &UnguardedF64
impl Mul<&f64> for &UnguardedF64
Source§fn mul(self, rhs: &f64) -> Self::Output
fn mul(self, rhs: &f64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<&f64> for UnguardedF64
impl Mul<&f64> for UnguardedF64
Source§fn mul(self, rhs: &f64) -> Self::Output
fn mul(self, rhs: &f64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<GuardedF64> for &UnguardedF64
impl Mul<GuardedF64> for &UnguardedF64
Source§fn mul(self, rhs: GuardedF64) -> Self::Output
fn mul(self, rhs: GuardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<GuardedF64> for UnguardedF64
impl Mul<GuardedF64> for UnguardedF64
Source§fn mul(self, rhs: GuardedF64) -> Self::Output
fn mul(self, rhs: GuardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<UnguardedF64> for &GuardedF64
impl Mul<UnguardedF64> for &GuardedF64
Source§fn mul(self, rhs: UnguardedF64) -> Self::Output
fn mul(self, rhs: UnguardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<UnguardedF64> for &UnguardedF64
impl Mul<UnguardedF64> for &UnguardedF64
Source§fn mul(self, rhs: UnguardedF64) -> Self::Output
fn mul(self, rhs: UnguardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<UnguardedF64> for &f64
impl Mul<UnguardedF64> for &f64
Source§fn mul(self, rhs: UnguardedF64) -> Self::Output
fn mul(self, rhs: UnguardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<UnguardedF64> for GuardedF64
impl Mul<UnguardedF64> for GuardedF64
Source§fn mul(self, rhs: UnguardedF64) -> Self::Output
fn mul(self, rhs: UnguardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<UnguardedF64> for f64
impl Mul<UnguardedF64> for f64
Source§fn mul(self, rhs: UnguardedF64) -> Self::Output
fn mul(self, rhs: UnguardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<f64> for &UnguardedF64
impl Mul<f64> for &UnguardedF64
Source§fn mul(self, rhs: f64) -> Self::Output
fn mul(self, rhs: f64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul<f64> for UnguardedF64
impl Mul<f64> for UnguardedF64
Source§fn mul(self, rhs: f64) -> Self::Output
fn mul(self, rhs: f64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl Mul for UnguardedF64
impl Mul for UnguardedF64
Source§fn mul(self, rhs: UnguardedF64) -> Self::Output
fn mul(self, rhs: UnguardedF64) -> Self::Output
Multiplies two GuardedF64 values or a GuardedF64 and a f64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(2.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 * value2), Ok(6.0));
assert_eq!((value1 * f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
* operator.Source§impl<T> MulAssign<T> for UnguardedF64where
T: Into<Self>,
impl<T> MulAssign<T> for UnguardedF64where
T: Into<Self>,
Source§fn mul_assign(&mut self, rhs: T)
fn mul_assign(&mut self, rhs: T)
Assigns the result of multiplying this UnguardedF64 by another.
§Example
use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(2.0);
let b = UnguardedF64::from(3.0);
a *= b;
assert_eq!(a.check(), GuardedF64::new(6.0));use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(2.0);
let b = 3.0;
a *= b;
assert_eq!(a.check(), GuardedF64::new(6.0));use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(2.0);
let b = GuardedF64::new(3.0).unwrap();
a *= b;
assert_eq!(a.check(), GuardedF64::new(6.0));Source§impl Neg for &UnguardedF64
impl Neg for &UnguardedF64
Source§fn neg(self) -> Self::Output
fn neg(self) -> Self::Output
Negates the GuardedF64 or UnguardedF64 value.
§Returns
Returns a new Self instance with the negated value. Unlike other operations, this does not
default to creating an UnguardedF64 for GuardedF64, as -x is always valid for finite
and non-NaN values.
§Example
use floatguard::{GuardedF64, FloatError, UnguardedF64};
let value = GuardedF64::new(2.0).unwrap();
assert_eq!(-value, -2.0);
let value = UnguardedF64::new(2.0);
assert_eq!(f64::try_from(-value), Ok(-2.0));
let invalid_value = UnguardedF64::new(f64::NAN);
assert_eq!((-invalid_value).check(), Err(FloatError::NaN));
let infinity_value = UnguardedF64::new(f64::INFINITY);
assert_eq!((-infinity_value).check(), Err(FloatError::Infinity));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Neg for UnguardedF64
impl Neg for UnguardedF64
Source§fn neg(self) -> Self::Output
fn neg(self) -> Self::Output
Negates the GuardedF64 or UnguardedF64 value.
§Returns
Returns a new Self instance with the negated value. Unlike other operations, this does not
default to creating an UnguardedF64 for GuardedF64, as -x is always valid for finite
and non-NaN values.
§Example
use floatguard::{GuardedF64, FloatError, UnguardedF64};
let value = GuardedF64::new(2.0).unwrap();
assert_eq!(-value, -2.0);
let value = UnguardedF64::new(2.0);
assert_eq!(f64::try_from(-value), Ok(-2.0));
let invalid_value = UnguardedF64::new(f64::NAN);
assert_eq!((-invalid_value).check(), Err(FloatError::NaN));
let infinity_value = UnguardedF64::new(f64::INFINITY);
assert_eq!((-infinity_value).check(), Err(FloatError::Infinity));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Rem<&GuardedF64> for &UnguardedF64
impl Rem<&GuardedF64> for &UnguardedF64
Source§fn rem(self, rhs: &GuardedF64) -> Self::Output
fn rem(self, rhs: &GuardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<&GuardedF64> for UnguardedF64
impl Rem<&GuardedF64> for UnguardedF64
Source§fn rem(self, rhs: &GuardedF64) -> Self::Output
fn rem(self, rhs: &GuardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<&UnguardedF64> for &GuardedF64
impl Rem<&UnguardedF64> for &GuardedF64
Source§fn rem(self, rhs: &UnguardedF64) -> Self::Output
fn rem(self, rhs: &UnguardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<&UnguardedF64> for &UnguardedF64
impl Rem<&UnguardedF64> for &UnguardedF64
Source§fn rem(self, rhs: &UnguardedF64) -> Self::Output
fn rem(self, rhs: &UnguardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<&UnguardedF64> for &f64
impl Rem<&UnguardedF64> for &f64
Source§fn rem(self, rhs: &UnguardedF64) -> Self::Output
fn rem(self, rhs: &UnguardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<&UnguardedF64> for GuardedF64
impl Rem<&UnguardedF64> for GuardedF64
Source§fn rem(self, rhs: &UnguardedF64) -> Self::Output
fn rem(self, rhs: &UnguardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<&UnguardedF64> for UnguardedF64
impl Rem<&UnguardedF64> for UnguardedF64
Source§fn rem(self, rhs: &UnguardedF64) -> Self::Output
fn rem(self, rhs: &UnguardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<&UnguardedF64> for f64
impl Rem<&UnguardedF64> for f64
Source§fn rem(self, rhs: &UnguardedF64) -> Self::Output
fn rem(self, rhs: &UnguardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<&f64> for &UnguardedF64
impl Rem<&f64> for &UnguardedF64
Source§fn rem(self, rhs: &f64) -> Self::Output
fn rem(self, rhs: &f64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<&f64> for UnguardedF64
impl Rem<&f64> for UnguardedF64
Source§fn rem(self, rhs: &f64) -> Self::Output
fn rem(self, rhs: &f64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<GuardedF64> for &UnguardedF64
impl Rem<GuardedF64> for &UnguardedF64
Source§fn rem(self, rhs: GuardedF64) -> Self::Output
fn rem(self, rhs: GuardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<GuardedF64> for UnguardedF64
impl Rem<GuardedF64> for UnguardedF64
Source§fn rem(self, rhs: GuardedF64) -> Self::Output
fn rem(self, rhs: GuardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<UnguardedF64> for &GuardedF64
impl Rem<UnguardedF64> for &GuardedF64
Source§fn rem(self, rhs: UnguardedF64) -> Self::Output
fn rem(self, rhs: UnguardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<UnguardedF64> for &UnguardedF64
impl Rem<UnguardedF64> for &UnguardedF64
Source§fn rem(self, rhs: UnguardedF64) -> Self::Output
fn rem(self, rhs: UnguardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<UnguardedF64> for &f64
impl Rem<UnguardedF64> for &f64
Source§fn rem(self, rhs: UnguardedF64) -> Self::Output
fn rem(self, rhs: UnguardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<UnguardedF64> for GuardedF64
impl Rem<UnguardedF64> for GuardedF64
Source§fn rem(self, rhs: UnguardedF64) -> Self::Output
fn rem(self, rhs: UnguardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<UnguardedF64> for f64
impl Rem<UnguardedF64> for f64
Source§fn rem(self, rhs: UnguardedF64) -> Self::Output
fn rem(self, rhs: UnguardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<f64> for &UnguardedF64
impl Rem<f64> for &UnguardedF64
Source§fn rem(self, rhs: f64) -> Self::Output
fn rem(self, rhs: f64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem<f64> for UnguardedF64
impl Rem<f64> for UnguardedF64
Source§fn rem(self, rhs: f64) -> Self::Output
fn rem(self, rhs: f64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl Rem for UnguardedF64
impl Rem for UnguardedF64
Source§fn rem(self, rhs: UnguardedF64) -> Self::Output
fn rem(self, rhs: UnguardedF64) -> Self::Output
Computes the remainder of division between two GuardedF64 values or a GuardedF64 and
a f64.
§Example
use floatguard::{GuardedF64, UnguardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 % value2), Ok(2.0));
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % 0.0).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((value1 % f64::NAN).check(), Err(FloatError::NaN));
assert_eq!((f64::NAN % value1).check(), Err(FloatError::NaN));
let value1 = UnguardedF64::new(6.0);
assert_eq!((f64::INFINITY % value1).check(), Err(FloatError::Infinity));
assert_eq!((value1 % f64::INFINITY).check(), Err(FloatError::Infinity));
let value1 = UnguardedF64::new(f64::INFINITY);
let value2 = UnguardedF64::new(f64::NAN);
assert_eq!((value1 % value2).check(), Err(FloatError::NaN));
assert_eq!((value2 % value1).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
% operator.Source§impl<T> RemAssign<T> for UnguardedF64where
T: Into<Self>,
impl<T> RemAssign<T> for UnguardedF64where
T: Into<Self>,
Source§fn rem_assign(&mut self, rhs: T)
fn rem_assign(&mut self, rhs: T)
Assigns the result of taking the remainder of this UnguardedF64 divided by another.
§Example
use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(5.0);
let b = UnguardedF64::from(2.0);
a %= b;
assert_eq!(a.check(), GuardedF64::new(1.0));use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(5.0);
let b = 2.0;
a %= b;
assert_eq!(a.check(), GuardedF64::new(1.0));use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(5.0);
let b = GuardedF64::new(2.0).unwrap();
a %= b;
assert_eq!(a.check(), GuardedF64::new(1.0));Source§impl Sub<&GuardedF64> for &UnguardedF64
impl Sub<&GuardedF64> for &UnguardedF64
Source§fn sub(self, rhs: &GuardedF64) -> Self::Output
fn sub(self, rhs: &GuardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<&GuardedF64> for UnguardedF64
impl Sub<&GuardedF64> for UnguardedF64
Source§fn sub(self, rhs: &GuardedF64) -> Self::Output
fn sub(self, rhs: &GuardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<&UnguardedF64> for &GuardedF64
impl Sub<&UnguardedF64> for &GuardedF64
Source§fn sub(self, rhs: &UnguardedF64) -> Self::Output
fn sub(self, rhs: &UnguardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<&UnguardedF64> for &UnguardedF64
impl Sub<&UnguardedF64> for &UnguardedF64
Source§fn sub(self, rhs: &UnguardedF64) -> Self::Output
fn sub(self, rhs: &UnguardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<&UnguardedF64> for &f64
impl Sub<&UnguardedF64> for &f64
Source§fn sub(self, rhs: &UnguardedF64) -> Self::Output
fn sub(self, rhs: &UnguardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<&UnguardedF64> for GuardedF64
impl Sub<&UnguardedF64> for GuardedF64
Source§fn sub(self, rhs: &UnguardedF64) -> Self::Output
fn sub(self, rhs: &UnguardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<&UnguardedF64> for UnguardedF64
impl Sub<&UnguardedF64> for UnguardedF64
Source§fn sub(self, rhs: &UnguardedF64) -> Self::Output
fn sub(self, rhs: &UnguardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<&UnguardedF64> for f64
impl Sub<&UnguardedF64> for f64
Source§fn sub(self, rhs: &UnguardedF64) -> Self::Output
fn sub(self, rhs: &UnguardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<&f64> for &UnguardedF64
impl Sub<&f64> for &UnguardedF64
Source§fn sub(self, rhs: &f64) -> Self::Output
fn sub(self, rhs: &f64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<&f64> for UnguardedF64
impl Sub<&f64> for UnguardedF64
Source§fn sub(self, rhs: &f64) -> Self::Output
fn sub(self, rhs: &f64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<GuardedF64> for &UnguardedF64
impl Sub<GuardedF64> for &UnguardedF64
Source§fn sub(self, rhs: GuardedF64) -> Self::Output
fn sub(self, rhs: GuardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<GuardedF64> for UnguardedF64
impl Sub<GuardedF64> for UnguardedF64
Source§fn sub(self, rhs: GuardedF64) -> Self::Output
fn sub(self, rhs: GuardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<UnguardedF64> for &GuardedF64
impl Sub<UnguardedF64> for &GuardedF64
Source§fn sub(self, rhs: UnguardedF64) -> Self::Output
fn sub(self, rhs: UnguardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<UnguardedF64> for &UnguardedF64
impl Sub<UnguardedF64> for &UnguardedF64
Source§fn sub(self, rhs: UnguardedF64) -> Self::Output
fn sub(self, rhs: UnguardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<UnguardedF64> for &f64
impl Sub<UnguardedF64> for &f64
Source§fn sub(self, rhs: UnguardedF64) -> Self::Output
fn sub(self, rhs: UnguardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<UnguardedF64> for GuardedF64
impl Sub<UnguardedF64> for GuardedF64
Source§fn sub(self, rhs: UnguardedF64) -> Self::Output
fn sub(self, rhs: UnguardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<UnguardedF64> for f64
impl Sub<UnguardedF64> for f64
Source§fn sub(self, rhs: UnguardedF64) -> Self::Output
fn sub(self, rhs: UnguardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<f64> for &UnguardedF64
impl Sub<f64> for &UnguardedF64
Source§fn sub(self, rhs: f64) -> Self::Output
fn sub(self, rhs: f64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub<f64> for UnguardedF64
impl Sub<f64> for UnguardedF64
Source§fn sub(self, rhs: f64) -> Self::Output
fn sub(self, rhs: f64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl Sub for UnguardedF64
impl Sub for UnguardedF64
Source§fn sub(self, rhs: UnguardedF64) -> Self::Output
fn sub(self, rhs: UnguardedF64) -> Self::Output
Subtracts one GuardedF64 value from another or a f64 from a GuardedF64.
§Example
use floatguard::{GuardedF64, FloatError};
let value1 = GuardedF64::new(5.0).unwrap();
let value2 = GuardedF64::new(3.0).unwrap();
assert_eq!(f64::try_from(value1 - value2), Ok(2.0));
assert_eq!((value1 - f64::NAN).check(), Err(FloatError::NaN));Source§type Output = UnguardedF64
type Output = UnguardedF64
- operator.Source§impl<T> SubAssign<T> for UnguardedF64where
T: Into<Self>,
impl<T> SubAssign<T> for UnguardedF64where
T: Into<Self>,
Source§fn sub_assign(&mut self, rhs: T)
fn sub_assign(&mut self, rhs: T)
Assigns the result of subtracting another UnguardedF64 from this one.
§Example
use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(3.0);
let b = UnguardedF64::from(2.0);
a -= b;
assert_eq!(a.check(), GuardedF64::new(1.0));use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(3.0);
let b = 2.0;
a -= b;
assert_eq!(a.check(), GuardedF64::new(1.0));use floatguard::{GuardedF64, UnguardedF64};
let mut a = UnguardedF64::from(3.0);
let b = GuardedF64::new(2.0).unwrap();
a -= b;
assert_eq!(a.check(), GuardedF64::new(1.0));Source§impl TryFrom<UnguardedF64> for GuardedF64
impl TryFrom<UnguardedF64> for GuardedF64
Source§fn try_from(value: UnguardedF64) -> Result<Self, Self::Error>
fn try_from(value: UnguardedF64) -> Result<Self, Self::Error>
Converts an UnguardedF64 to GuardedF64.
§Returns
Returns a GuardedF64 if the value is valid (finite), otherwise returns an error.
§Errors
Returns FloatError if the value is NaN or infinite.
§Example
use floatguard::{UnguardedF64, FloatError, GuardedF64};
let valid_value = UnguardedF64::new(2.0);
assert_eq!(valid_value.try_into(), GuardedF64::new(2.0));
let invalid_value = UnguardedF64::new(f64::NAN);
assert_eq!(GuardedF64::try_from(invalid_value), Err(FloatError::NaN));
let inf_value = UnguardedF64::new(f64::INFINITY);
assert_eq!(GuardedF64::try_from(inf_value), Err(FloatError::Infinity));Source§impl TryFrom<UnguardedF64> for f64
Implementing the ability to convert GuardedF64 to f64 safely.
impl TryFrom<UnguardedF64> for f64
Implementing the ability to convert GuardedF64 to f64 safely.
This conversion will return an error if the value is NaN or infinite.
Source§fn try_from(value: UnguardedF64) -> Result<Self, Self::Error>
fn try_from(value: UnguardedF64) -> Result<Self, Self::Error>
Converts a GuardedF64 to f64.
§Returns
Returns the inner f64 value if it is valid (finite), otherwise returns an error.
§Errors
Returns FloatError if the value is NaN or infinite.
§Example
use floatguard::{UnguardedF64, FloatError};
let valid_value = UnguardedF64::new(2.0);
assert_eq!(valid_value.try_into(), Ok(2.0));
let invalid_value = UnguardedF64::new(f64::NAN);
assert_eq!(f64::try_from(invalid_value), Err(FloatError::NaN));
let inf_value = UnguardedF64::new(f64::INFINITY);
assert_eq!(f64::try_from(inf_value), Err(FloatError::Infinity));