I have had the same problem. I always end up with something like:
/// Compare two [`f64`] numbers while treating [NaN](f64::NAN) as greatest.
pub fn cmp_f64_nan_greatest(a: f64, b: f64) -> std::cmp::Ordering {
a.partial_cmp(&b).unwrap_or_else(|| {
a.is_nan().cmp(&b.is_nan()).then(std::cmp::Ordering::Equal)
})
}
And then using that in a closure passed to sort_by
.
It's annoying. I agree.
That I don't do. I'm always worried NaN's could actually appear.
How about partial_sort
, which is happy with PartialOrd
? (Maybe I shouldn't have made a new thread, will be more careful next time, as these topics are kinda related.)
P.S.: I just gave an outline of an example in the other thread, as this is related to the original question: "Why sort()
need T
to be Ord
?"