Struct UnguardedF64

Source
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

Source

pub const RADIX: u32 = 2u32

The radix or base of the internal representation of f64.

See: f64::RADIX

Source§

impl UnguardedF64

Source

pub const MANTISSA_DIGITS: u32 = 53u32

Number of significant digits in base 2.

See: f64::MANTISSA_DIGITS.

Source§

impl UnguardedF64

Source

pub const DIGITS: u32 = 15u32

Approximate number of significant digits in base 10.

See: f64::DIGITS.

Source§

impl UnguardedF64

Source

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

Source

pub const MIN: GuardedF64

Smallest finite f64 value.

See: f64::MIN

Source§

impl UnguardedF64

Source

pub const MIN_POSITIVE: GuardedF64

Smallest positive normal f64 value.

See: f64::MIN_POSITIVE

Source§

impl UnguardedF64

Source

pub const MAX: GuardedF64

Largest finite f64 value.

See: f64::MAX

Source§

impl UnguardedF64

Source

pub const MIN_EXP: i32 = -1_021i32

Minimum possible normal power of 2 exponent.

See: f64::MIN_EXP

Source§

impl UnguardedF64

Source

pub const MAX_EXP: i32 = 1_024i32

Maximum possible normal power of 2 exponent.

See: f64::MAX_EXP

Source§

impl UnguardedF64

Source

pub const MIN_10_EXP: i32 = -307i32

Minimum possible normal power of 10 exponent.

See: f64::MIN_10_EXP

Source§

impl UnguardedF64

Source

pub const MAX_10_EXP: i32 = 308i32

Maximum possible normal power of 10 exponent.

See: f64::MAX_10_EXP

Source§

impl UnguardedF64

Source

pub const PI: GuardedF64

Archimedes’ constant (π)

See: std::f64::consts::PI

Source§

impl UnguardedF64

Source

pub const TAU: GuardedF64

The full circle constant (τ = 2π)

See: std::f64::consts::TAU

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source

pub const E: GuardedF64

Euler’s number (e)

See: std::f64::consts::E

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source§

impl UnguardedF64

Source

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

Source

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

Source

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

Source

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

Source

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

Source

pub fn exp(self) -> UnguardedF64

Returns e(self), (the exponential function).

See: f64::exp

§Examples
use floatguard::UnguardedF64;

let one = UnguardedF64::new(1.0_f64);

// e^1
let e = one.exp();

// ln(e) - 1 == 0
let abs_difference = (e.ln() - 1.0).abs().check().unwrap();

assert!(abs_difference < 1e-10);
Source§

impl UnguardedF64

Source

pub fn ln(self) -> UnguardedF64

Returns the natural logarithm of a number, ln(self).

See: f64::ln

§Examples
use floatguard::UnguardedF64;

let e = UnguardedF64::new(2.718281828459045_f64);

// ln(e) == 1
let abs_difference = (e.ln() - 1.0).abs().check().unwrap();

assert!(abs_difference < 1e-10);
Source§

impl UnguardedF64

Source

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

Source

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

Source

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

Source

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

Source

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

Source

pub fn sin(self) -> UnguardedF64

Computes the sine of a number (in radians).

See: f64::sin

§Examples
use floatguard::GuardedF64;

let x = std::f64::consts::FRAC_PI_2;

let abs_difference = (x.sin() - 1.0).abs();

assert!(abs_difference < 1e-10);
Source§

impl UnguardedF64

Source

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

Source

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

Source

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

Source

pub fn cos(self) -> UnguardedF64

Computes the cosine of a number (in radians).

See: f64::cos

§Examples
use floatguard::GuardedF64;

let x = 2.0 * GuardedF64::PI;

let abs_difference = (x.cos() - 1.0).abs().check().unwrap();

assert!(abs_difference < 1e-10);
Source§

impl UnguardedF64

Source

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

Source

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

Source

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

Source

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

Source

pub fn tan(self) -> UnguardedF64

Computes the tangent of a number (in radians).

See: f64::tan

§Examples
use floatguard::GuardedF64;

let x = GuardedF64::FRAC_PI_4;
let abs_difference = (x.tan() - 1.0).abs().check().unwrap();

assert!(abs_difference < 1e-14);
Source§

impl UnguardedF64

Source

pub fn atan(self) -> UnguardedF64

Computes the arctangent of a number. Return value is in radians in the range [-π/2, π/2].

See: f64::atan

§Examples
use floatguard::UnguardedF64;

let f = UnguardedF64::new(1.0);

// atan(tan(1))
let abs_difference = (f.tan().atan() - 1.0).abs().check().unwrap();

assert!(abs_difference < 1e-10)
Source§

impl UnguardedF64

Source

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

Source

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

Source

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());
Source§

impl UnguardedF64

Source

pub const fn new(value: f64) -> Self

Creates a new UnguardedF64 instance.

§Returns

Returns a new UnguardedF64 instance containing the provided f64 value.

Trait Implementations§

Source§

impl Add<&GuardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<&GuardedF64> for UnguardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<&UnguardedF64> for &GuardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<&UnguardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<&UnguardedF64> for &f64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<&UnguardedF64> for GuardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<&UnguardedF64> for UnguardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<&UnguardedF64> for f64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<&f64> for &UnguardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<&f64> for UnguardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<GuardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<GuardedF64> for UnguardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<UnguardedF64> for &GuardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<UnguardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<UnguardedF64> for &f64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<UnguardedF64> for GuardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<UnguardedF64> for f64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<f64> for &UnguardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add<f64> for UnguardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl Add for UnguardedF64

Source§

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

The resulting type after applying the + operator.
Source§

impl<T> AddAssign<T> for UnguardedF64
where T: Into<Self>,

Source§

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

Source§

fn clone(&self) -> UnguardedF64

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for UnguardedF64

Source§

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

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

impl Default for UnguardedF64

Source§

fn default() -> UnguardedF64

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

impl Display for UnguardedF64

Source§

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

Formats the GuardedF64 as a string.

§Returns

Returns a string representation of the inner f64 value.

§Example
use floatguard::GuardedF64;

let value = GuardedF64::new(2.0).unwrap();
assert_eq!(value.to_string(), "2");
Source§

impl Div<&GuardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<&GuardedF64> for UnguardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<&UnguardedF64> for &GuardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<&UnguardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<&UnguardedF64> for &f64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<&UnguardedF64> for GuardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<&UnguardedF64> for UnguardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<&UnguardedF64> for f64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<&f64> for &UnguardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<&f64> for UnguardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<GuardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<GuardedF64> for UnguardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<UnguardedF64> for &GuardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<UnguardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<UnguardedF64> for &f64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<UnguardedF64> for GuardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<UnguardedF64> for f64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<f64> for &UnguardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div<f64> for UnguardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl Div for UnguardedF64

Source§

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

The resulting type after applying the / operator.
Source§

impl<T> DivAssign<T> for UnguardedF64
where T: Into<Self>,

Source§

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

Source§

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

Source§

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

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<&GuardedF64> for UnguardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<&UnguardedF64> for &GuardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<&UnguardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<&UnguardedF64> for &f64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<&UnguardedF64> for GuardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<&UnguardedF64> for UnguardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<&UnguardedF64> for f64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<&f64> for &UnguardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<&f64> for UnguardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<GuardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<GuardedF64> for UnguardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<UnguardedF64> for &GuardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<UnguardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<UnguardedF64> for &f64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<UnguardedF64> for GuardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<UnguardedF64> for f64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<f64> for &UnguardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul<f64> for UnguardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl Mul for UnguardedF64

Source§

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

The resulting type after applying the * operator.
Source§

impl<T> MulAssign<T> for UnguardedF64
where T: Into<Self>,

Source§

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

Source§

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

The resulting type after applying the - operator.
Source§

impl Neg for UnguardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Rem<&GuardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<&GuardedF64> for UnguardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<&UnguardedF64> for &GuardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<&UnguardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<&UnguardedF64> for &f64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<&UnguardedF64> for GuardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<&UnguardedF64> for UnguardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<&UnguardedF64> for f64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<&f64> for &UnguardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<&f64> for UnguardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<GuardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<GuardedF64> for UnguardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<UnguardedF64> for &GuardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<UnguardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<UnguardedF64> for &f64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<UnguardedF64> for GuardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<UnguardedF64> for f64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<f64> for &UnguardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem<f64> for UnguardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl Rem for UnguardedF64

Source§

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

The resulting type after applying the % operator.
Source§

impl<T> RemAssign<T> for UnguardedF64
where T: Into<Self>,

Source§

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

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<&GuardedF64> for UnguardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<&UnguardedF64> for &GuardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<&UnguardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<&UnguardedF64> for &f64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<&UnguardedF64> for GuardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<&UnguardedF64> for UnguardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<&UnguardedF64> for f64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<&f64> for &UnguardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<&f64> for UnguardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<GuardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<GuardedF64> for UnguardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<UnguardedF64> for &GuardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<UnguardedF64> for &UnguardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<UnguardedF64> for &f64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<UnguardedF64> for GuardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<UnguardedF64> for f64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<f64> for &UnguardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub<f64> for UnguardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl Sub for UnguardedF64

Source§

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

The resulting type after applying the - operator.
Source§

impl<T> SubAssign<T> for UnguardedF64
where T: Into<Self>,

Source§

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

Source§

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§

type Error = Error

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

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>

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));
Source§

type Error = Error

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

impl Copy for UnguardedF64

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

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

Source§

type Error = Infallible

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

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

Performs the conversion.
Source§

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

Source§

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

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

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

Performs the conversion.