pub struct ClampedF32(/* private fields */);Expand description
An f32 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 GLclampf is used.
Implementations§
source§impl ClampedF32
impl ClampedF32
sourcepub fn clamp(value: f32) -> Self
pub fn clamp(value: f32) -> 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: f32) -> Result<Self, ClampedError>
pub fn new(value: f32) -> 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: f32) -> Self
pub const unsafe fn new_unchecked(value: f32) -> 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 ClampedF32
impl ClampedF32
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 = f32>§
pub const RADIX: u32 = 2u32
pub const MANTISSA_DIGITS: u32 = 24u32
pub const DIGITS: u32 = 6u32
pub const EPSILON: f32 = 1.1920929E-7f32
pub const MIN: f32 = -3.40282347E+38f32
pub const MIN_POSITIVE: f32 = 1.17549435E-38f32
pub const MAX: f32 = 3.40282347E+38f32
pub const MIN_EXP: i32 = -125i32
pub const MAX_EXP: i32 = 128i32
pub const MIN_10_EXP: i32 = -37i32
pub const MAX_10_EXP: i32 = 38i32
pub const NAN: f32 = NaN_f32
pub const INFINITY: f32 = +Inf_f32
pub const NEG_INFINITY: f32 = -Inf_f32
1.62.0 · sourcepub fn total_cmp(&self, other: &f32) -> Ordering
pub fn total_cmp(&self, other: &f32) -> 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 f32. 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: f32,
}
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: f32::INFINITY },
GoodBoy { name: "Abs. Unit".to_owned(), weight: f32::NAN },
GoodBoy { name: "Floaty".to_owned(), weight: -5.0 },
];
bois.sort_by(|a, b| a.weight.total_cmp(&b.weight));
// `f32::NAN` could be positive or negative, which will affect the sort order.
if f32::NAN.is_sign_negative() {
assert!(bois.into_iter().map(|b| b.weight)
.zip([f32::NAN, -5.0, 0.1, 10.0, 99.0, f32::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, f32::INFINITY, f32::NAN].iter())
.all(|(a, b)| a.to_bits() == b.to_bits()))
}Trait Implementations§
source§impl Add<ClampedF32> for f32
impl Add<ClampedF32> for f32
source§impl Add<f32> for ClampedF32
impl Add<f32> for ClampedF32
source§impl Add for ClampedF32
impl Add for ClampedF32
source§impl AsRef<f32> for ClampedF32
impl AsRef<f32> for ClampedF32
source§impl Borrow<f32> for ClampedF32
impl Borrow<f32> for ClampedF32
source§impl Clone for ClampedF32
impl Clone for ClampedF32
source§fn clone(&self) -> ClampedF32
fn clone(&self) -> ClampedF32
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl Debug for ClampedF32
impl Debug for ClampedF32
source§impl Default for ClampedF32
impl Default for ClampedF32
source§fn default() -> ClampedF32
fn default() -> ClampedF32
source§impl Deref for ClampedF32
impl Deref for ClampedF32
source§impl Display for ClampedF32
impl Display for ClampedF32
source§impl Div<ClampedF32> for f32
impl Div<ClampedF32> for f32
source§impl Div<f32> for ClampedF32
impl Div<f32> for ClampedF32
source§impl Div for ClampedF32
impl Div for ClampedF32
source§impl From<f32> for ClampedF32
impl From<f32> for ClampedF32
source§impl Mul<ClampedF32> for f32
impl Mul<ClampedF32> for f32
source§impl Mul<f32> for ClampedF32
impl Mul<f32> for ClampedF32
source§impl Mul for ClampedF32
impl Mul for ClampedF32
source§impl MulAssign for ClampedF32
impl MulAssign for ClampedF32
source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
*= operation. Read moresource§impl PartialEq<ClampedF32> for f32
impl PartialEq<ClampedF32> for f32
source§impl PartialEq<f32> for ClampedF32
impl PartialEq<f32> for ClampedF32
source§impl PartialEq for ClampedF32
impl PartialEq for ClampedF32
source§impl PartialOrd<ClampedF32> for f32
impl PartialOrd<ClampedF32> for f32
source§impl PartialOrd<f32> for ClampedF32
impl PartialOrd<f32> for ClampedF32
source§impl PartialOrd for ClampedF32
impl PartialOrd for ClampedF32
source§impl Rem<ClampedF32> for f32
impl Rem<ClampedF32> for f32
source§impl Rem<f32> for ClampedF32
impl Rem<f32> for ClampedF32
source§impl Rem for ClampedF32
impl Rem for ClampedF32
source§impl Sub<ClampedF32> for f32
impl Sub<ClampedF32> for f32
source§impl Sub<f32> for ClampedF32
impl Sub<f32> for ClampedF32
source§impl Sub for ClampedF32
impl Sub for ClampedF32
impl Copy for ClampedF32
impl StructuralPartialEq for ClampedF32
Auto Trait Implementations§
impl Freeze for ClampedF32
impl RefUnwindSafe for ClampedF32
impl Send for ClampedF32
impl Sync for ClampedF32
impl Unpin for ClampedF32
impl UnwindSafe for ClampedF32
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)