pub struct NotNan<T>();
Expand description
A wrapper around floats providing an implementation of Eq
, Ord
and Hash
.
A NaN value cannot be stored in this type.
use ordered_float::NotNan;
let mut v = [NotNan::new(2.0).unwrap(), NotNan::new(1.0).unwrap()];
v.sort();
assert_eq!(v, [1.0, 2.0]);
Because NotNan
implements Ord
and Eq
, it can be used as a key in a HashSet
, HashMap
, BTreeMap
, or BTreeSet
(unlike the primitive f32
or f64
types):
let mut s: HashSet<NotNan<f32>> = HashSet::new();
let key = NotNan::new(1.0).unwrap();
s.insert(key);
assert!(s.contains(&key));
-0.0
and +0.0
are still considered equal. This different sign may show up in printing, or when dividing by zero (the sign of the zero becomes the sign of the resulting infinity). Therefore, NotNan
may be unsuitable for use as a key in interning and memoization applications which require equal results from equal inputs, unless signed zeros make no difference or are canonicalized before insertion.
Arithmetic on NotNan values will panic if it produces a NaN value:
ⓘlet a = NotNan::new(std::f32::INFINITY).unwrap();
let b = NotNan::new(std::f32::NEG_INFINITY).unwrap();
let c = a + b;
§Representation
NotNan
has #[repr(transparent)]
, so it is sound to use transmute or pointer casts to convert between any type T
and NotNan<T>
, as long as this does not create a NaN value. However, consider using [bytemuck
] as a safe alternative if possible. [bytemuck
]: https://docs.rs/bytemuck/1/
Create a NotNan
value.
Returns Err
if val
is NaN
Get the value out.
SourceCreate a NotNan
value from a value that is guaranteed to not be NaN
Behaviour is undefined if val
is NaN
👎Deprecated since 2.5.0: Please use the new_unchecked function instead.
Create a NotNan
value from a value that is guaranteed to not be NaN
Behaviour is undefined if val
is NaN
Adds a float directly.
This returns a T
and not a NotNan<T>
because if the added value is NaN, this will be NaN
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Convert a value to another, using the as
operator.
Converts this type into a shared reference of the (usually inferred) input type.
Source§ Source§ Source§ Source§Returns the smallest finite number this type can represent
Source§Returns the largest finite number this type can represent
Source§ Source§ Source§ Source§ Source§The resulting type after dereferencing.
Source§Dereferences the value.
Source§ Source§ Source§ Source§ Source§ Source§ Source§Divides a float directly.
This returns a T
and not a NotNan<T>
because if the divided-by value is NaN, this will be NaN
Converts to this type from the input type.
Source§ Source§Converts to this type from the input type.
Source§ Source§Converts to this type from the input type.
Source§ Source§Converts to this type from the input type.
Source§ Source§Converts to this type from the input type.
Source§ Source§Converts to this type from the input type.
Source§ Source§Converts to this type from the input type.
Source§ Source§Converts to this type from the input type.
Source§ Source§Converts to this type from the input type.
Source§ Source§Converts to this type from the input type.
Source§ Source§Converts to this type from the input type.
Source§ Source§Converts to this type from the input type.
Source§ Source§Converts to this type from the input type.
Source§ Source§Converts an i64
to return an optional value of this type. If the value cannot be represented by this type, then None
is returned.
Converts an u64
to return an optional value of this type. If the value cannot be represented by this type, then None
is returned.
Converts an isize
to return an optional value of this type. If the value cannot be represented by this type, then None
is returned.
Converts an i8
to return an optional value of this type. If the value cannot be represented by this type, then None
is returned.
Converts an i16
to return an optional value of this type. If the value cannot be represented by this type, then None
is returned.
Converts an i32
to return an optional value of this type. If the value cannot be represented by this type, then None
is returned.
Converts a usize
to return an optional value of this type. If the value cannot be represented by this type, then None
is returned.
Converts an u8
to return an optional value of this type. If the value cannot be represented by this type, then None
is returned.
Converts an u16
to return an optional value of this type. If the value cannot be represented by this type, then None
is returned.
Converts an u32
to return an optional value of this type. If the value cannot be represented by this type, then None
is returned.
Converts a f32
to return an optional value of this type. If the value cannot be represented by this type, then None
is returned.
Converts a
f64
to return an optional value of this type. If the value cannot be represented by this type, then
None
is returned.
Read more Source§Converts an
i128
to return an optional value of this type. If the value cannot be represented by this type, then
None
is returned.
Read more Source§Converts an
u128
to return an optional value of this type. If the value cannot be represented by this type, then
None
is returned.
Read more Source§ Source§Convert a &str to NotNan
. Returns an error if the string fails to parse, or if the resulting value is NaN
use ordered_float::NotNan;
assert!("-10".parse::<NotNan<f32>>().is_ok());
assert!("abc".parse::<NotNan<f32>>().is_err());
assert!("NaN".parse::<NotNan<f32>>().is_err());
Source§
The associated error which can be returned from parsing.
Source§ Source§ Source§ Source§ Source§ Source§ Source§Multiplies a float directly.
This returns a T
and not a NotNan<T>
because if the multiplied value is NaN, this will be NaN
Creates a number from another value that can be converted into a primitive via the
ToPrimitive
trait. If the source value cannot be represented by the target type, then
None
is returned.
Read more Source§ Source§Returns the multiplicative identity element of
Self
,
1
.
Read more Source§Sets self
to the multiplicative identity element of Self
, 1
.
Returns
true
if
self
is equal to the multiplicative identity.
Read more Source§ Source§ Source§Tests for self
and other
values to be equal, and is used by ==
.
Tests for !=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Tests for self
and other
values to be equal, and is used by ==
.
Tests for !=
. The default implementation is almost always sufficient, and should not be overridden without very good reason.
This method returns an ordering between
self
and
other
values if one exists.
Read more 1.0.0 · Source§Tests less than (for
self
and
other
) and is used by the
<
operator.
Read more 1.0.0 · Source§Tests less than or equal to (for
self
and
other
) and is used by the
<=
operator.
Read more 1.0.0 · Source§Tests greater than (for
self
and
other
) and is used by the
>
operator.
Read more 1.0.0 · Source§Tests greater than or equal to (for
self
and
other
) and is used by the
>=
operator.
Read more Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§ Source§Takes an iterator and generates Self
from the elements by multiplying the items.
Takes an iterator and generates Self
from the elements by multiplying the items.
Calculates %
with a float directly.
This returns a T
and not a NotNan<T>
because if the RHS is NaN, this will be NaN
The positive difference of two numbers.
Read more Source§ Source§Returns true if the number is positive and false if the number is zero or negative.
Source§Returns true if the number is negative and false if the number is zero or positive.
Source§ Source§ Source§ Source§ Source§ Source§Subtracts a float directly.
This returns a T
and not a NotNan<T>
because if the substracted value is NaN, this will be NaN
Takes an iterator and generates Self
from the elements by “summing up” the items.
Adds a float directly.
Panics if the provided value is NaN.
Source§Takes an iterator and generates Self
from the elements by “summing up” the items.
Converts the value of self
to an i64
. If the value cannot be represented by an i64
, then None
is returned.
Converts the value of self
to a u64
. If the value cannot be represented by a u64
, then None
is returned.
Converts the value of self
to an isize
. If the value cannot be represented by an isize
, then None
is returned.
Converts the value of self
to an i8
. If the value cannot be represented by an i8
, then None
is returned.
Converts the value of self
to an i16
. If the value cannot be represented by an i16
, then None
is returned.
Converts the value of self
to an i32
. If the value cannot be represented by an i32
, then None
is returned.
Converts the value of self
to a usize
. If the value cannot be represented by a usize
, then None
is returned.
Converts the value of self
to a u8
. If the value cannot be represented by a u8
, then None
is returned.
Converts the value of self
to a u16
. If the value cannot be represented by a u16
, then None
is returned.
Converts the value of self
to a u32
. If the value cannot be represented by a u32
, then None
is returned.
Converts the value of self
to an f32
. Overflows may map to positive or negative inifinity, otherwise None
is returned if the value cannot be represented by an f32
.
Converts the value of
self
to an
f64
. Overflows may map to positive or negative inifinity, otherwise
None
is returned if the value cannot be represented by an
f64
.
Read more Source§Converts the value of
self
to an
i128
. If the value cannot be represented by an
i128
(
i64
under the default implementation), then
None
is returned.
Read more Source§Converts the value of
self
to a
u128
. If the value cannot be represented by a
u128
(
u64
under the default implementation), then
None
is returned.
Read more Source§ Source§The type returned in the event of a conversion error.
Source§Performs the conversion.
Source§ Source§The type returned in the event of a conversion error.
Source§Performs the conversion.
Source§ Source§Returns the additive identity element of
Self
,
0
.
Read more Source§Returns true
if self
is equal to the additive identity.
Sets self
to the additive identity element of Self
, 0
.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4