pub struct ClampedF64(/* private fields */);Expand description
An f64 point value clamped between 0.0 and 1.0.
This upholds the invariant that the value is always clamped at construction time so that the caller is not required to make this check.
This is a drop-in replacement for cases where GLclampd is used.
Implementations§
source§impl ClampedF64
impl ClampedF64
sourcepub fn clamp(value: f64) -> Self
pub fn clamp(value: f64) -> Self
Create a new Clamped floating point value.
The value will be clamped between 0.0 and 1.0.
§Parameters
value- The value to clamp.
sourcepub fn new(value: f64) -> Result<Self, ClampedError>
pub fn new(value: f64) -> Result<Self, ClampedError>
Create a new Clamped floating point value if the value is clamped between 0.0 and 1.0.
If the value is not clamped between 0.0 and 1.0, a ClampedError is
returned.
§Parameters
value- The value to clamp.
sourcepub const unsafe fn new_unchecked(value: f64) -> Self
pub const unsafe fn new_unchecked(value: f64) -> Self
Create a new Clamped instance without clamping the value.
Consider using the safe equivalent Self::new, or the
automatic clamping Self::clamp instead.
§Safety
The user is required to ensure that the value is clamped between 0.0 and 1.0, otherwise the behavior is undefined.
§Parameters
value- The value to clamp.
source§impl ClampedF64
impl ClampedF64
sourcepub fn saturating_add(self, rhs: Self) -> Self
pub fn saturating_add(self, rhs: Self) -> Self
Add two Clamped floating point values, clamping the result between 0.0 and 1.0.
§Parameters
rhs- The right-hand side value.
sourcepub fn saturating_sub(self, rhs: Self) -> Self
pub fn saturating_sub(self, rhs: Self) -> Self
Subtract two Clamped floating point values, clamping the result between 0.0 and 1.0.
§Parameters
rhs- The right-hand side value.
sourcepub fn saturating_mul(self, rhs: Self) -> Self
pub fn saturating_mul(self, rhs: Self) -> Self
Multiply two Clamped floating point values, clamping the result between 0.0 and 1.0.
§Parameters
rhs- The right-hand side value.
sourcepub fn saturating_div(self, rhs: Self) -> Self
pub fn saturating_div(self, rhs: Self) -> Self
Divide two Clamped floating point values, clamping the result between 0.0 and 1.0.
§Parameters
rhs- The right-hand side value.
sourcepub fn saturating_rem(self, rhs: Self) -> Self
pub fn saturating_rem(self, rhs: Self) -> Self
Modulo two Clamped floating point values, clamping the result between 0.0 and 1.0.
§Parameters
rhs- The right-hand side value.
sourcepub fn saturating_add_assign(&mut self, rhs: Self)
pub fn saturating_add_assign(&mut self, rhs: Self)
Add a Clamped floating point value to the current value, clamping the result between 0.0 and 1.0.
§Parameters
rhs- The right-hand side value.
sourcepub fn saturating_sub_assign(&mut self, rhs: Self)
pub fn saturating_sub_assign(&mut self, rhs: Self)
Subtract a Clamped floating point value from the current value, clamping the result between 0.0 and 1.0.
§Parameters
rhs- The right-hand side value.
sourcepub fn saturating_mul_assign(&mut self, rhs: Self)
pub fn saturating_mul_assign(&mut self, rhs: Self)
Multiply a Clamped floating point value with the current value, clamping the result between 0.0 and 1.0.
§Parameters
rhs- The right-hand side value.
sourcepub fn saturating_div_assign(&mut self, rhs: Self)
pub fn saturating_div_assign(&mut self, rhs: Self)
Divide a Clamped floating point value with the current value, clamping the result between 0.0 and 1.0.
§Parameters
rhs- The right-hand side value.
sourcepub fn saturating_rem_assign(&mut self, rhs: Self)
pub fn saturating_rem_assign(&mut self, rhs: Self)
Modulo a Clamped floating point value with the current value, clamping the result between 0.0 and 1.0.
§Parameters
rhs- The right-hand side value.
Methods from Deref<Target = f64>§
pub const RADIX: u32 = 2u32
pub const MANTISSA_DIGITS: u32 = 53u32
pub const DIGITS: u32 = 15u32
pub const EPSILON: f64 = 2.2204460492503131E-16f64
pub const MIN: f64 = -1.7976931348623157E+308f64
pub const MIN_POSITIVE: f64 = 2.2250738585072014E-308f64
pub const MAX: f64 = 1.7976931348623157E+308f64
pub const MIN_EXP: i32 = -1_021i32
pub const MAX_EXP: i32 = 1_024i32
pub const MIN_10_EXP: i32 = -307i32
pub const MAX_10_EXP: i32 = 308i32
pub const NAN: f64 = NaN_f64
pub const INFINITY: f64 = +Inf_f64
pub const NEG_INFINITY: f64 = -Inf_f64
1.62.0 · sourcepub fn total_cmp(&self, other: &f64) -> Ordering
pub fn total_cmp(&self, other: &f64) -> Ordering
Returns the ordering between self and other.
Unlike the standard partial comparison between floating point numbers,
this comparison always produces an ordering in accordance to
the totalOrder predicate as defined in the IEEE 754 (2008 revision)
floating point standard. The values are ordered in the following sequence:
- negative quiet NaN
- negative signaling NaN
- negative infinity
- negative numbers
- negative subnormal numbers
- negative zero
- positive zero
- positive subnormal numbers
- positive numbers
- positive infinity
- positive signaling NaN
- positive quiet NaN.
The ordering established by this function does not always agree with the
PartialOrd and PartialEq implementations of f64. For example,
they consider negative and positive zero equal, while total_cmp
doesn’t.
The interpretation of the signaling NaN bit follows the definition in the IEEE 754 standard, which may not match the interpretation by some of the older, non-conformant (e.g. MIPS) hardware implementations.
§Example
struct GoodBoy {
name: String,
weight: f64,
}
let mut bois = vec![
GoodBoy { name: "Pucci".to_owned(), weight: 0.1 },
GoodBoy { name: "Woofer".to_owned(), weight: 99.0 },
GoodBoy { name: "Yapper".to_owned(), weight: 10.0 },
GoodBoy { name: "Chonk".to_owned(), weight: f64::INFINITY },
GoodBoy { name: "Abs. Unit".to_owned(), weight: f64::NAN },
GoodBoy { name: "Floaty".to_owned(), weight: -5.0 },
];
bois.sort_by(|a, b| a.weight.total_cmp(&b.weight));
// `f64::NAN` could be positive or negative, which will affect the sort order.
if f64::NAN.is_sign_negative() {
assert!(bois.into_iter().map(|b| b.weight)
.zip([f64::NAN, -5.0, 0.1, 10.0, 99.0, f64::INFINITY].iter())
.all(|(a, b)| a.to_bits() == b.to_bits()))
} else {
assert!(bois.into_iter().map(|b| b.weight)
.zip([-5.0, 0.1, 10.0, 99.0, f64::INFINITY, f64::NAN].iter())
.all(|(a, b)| a.to_bits() == b.to_bits()))
}Trait Implementations§
source§impl Add<ClampedF64> for f64
impl Add<ClampedF64> for f64
source§impl Add<f64> for ClampedF64
impl Add<f64> for ClampedF64
source§impl Add for ClampedF64
impl Add for ClampedF64
source§impl AsRef<f64> for ClampedF64
impl AsRef<f64> for ClampedF64
source§impl Borrow<f64> for ClampedF64
impl Borrow<f64> for ClampedF64
source§impl Clone for ClampedF64
impl Clone for ClampedF64
source§fn clone(&self) -> ClampedF64
fn clone(&self) -> ClampedF64
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl Debug for ClampedF64
impl Debug for ClampedF64
source§impl Default for ClampedF64
impl Default for ClampedF64
source§fn default() -> ClampedF64
fn default() -> ClampedF64
source§impl Deref for ClampedF64
impl Deref for ClampedF64
source§impl Display for ClampedF64
impl Display for ClampedF64
source§impl Div<ClampedF64> for f64
impl Div<ClampedF64> for f64
source§impl Div<f64> for ClampedF64
impl Div<f64> for ClampedF64
source§impl Div for ClampedF64
impl Div for ClampedF64
source§impl From<f64> for ClampedF64
impl From<f64> for ClampedF64
source§impl Mul<ClampedF64> for f64
impl Mul<ClampedF64> for f64
source§impl Mul<f64> for ClampedF64
impl Mul<f64> for ClampedF64
source§impl Mul for ClampedF64
impl Mul for ClampedF64
source§impl MulAssign for ClampedF64
impl MulAssign for ClampedF64
source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
*= operation. Read moresource§impl PartialEq<ClampedF64> for f64
impl PartialEq<ClampedF64> for f64
source§impl PartialEq<f64> for ClampedF64
impl PartialEq<f64> for ClampedF64
source§impl PartialEq for ClampedF64
impl PartialEq for ClampedF64
source§impl PartialOrd<ClampedF64> for f64
impl PartialOrd<ClampedF64> for f64
source§impl PartialOrd<f64> for ClampedF64
impl PartialOrd<f64> for ClampedF64
source§impl PartialOrd for ClampedF64
impl PartialOrd for ClampedF64
source§impl Rem<ClampedF64> for f64
impl Rem<ClampedF64> for f64
source§impl Rem<f64> for ClampedF64
impl Rem<f64> for ClampedF64
source§impl Rem for ClampedF64
impl Rem for ClampedF64
source§impl Sub<ClampedF64> for f64
impl Sub<ClampedF64> for f64
source§impl Sub<f64> for ClampedF64
impl Sub<f64> for ClampedF64
source§impl Sub for ClampedF64
impl Sub for ClampedF64
impl Copy for ClampedF64
impl StructuralPartialEq for ClampedF64
Auto Trait Implementations§
impl Freeze for ClampedF64
impl RefUnwindSafe for ClampedF64
impl Send for ClampedF64
impl Sync for ClampedF64
impl Unpin for ClampedF64
impl UnwindSafe for ClampedF64
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)