Skip to content

Commit

Permalink
Rollup merge of #85730 - Smittyvb:iter-min-max-floats, r=m-ou-se
Browse files Browse the repository at this point in the history
Mention workaround for floats in Iterator::{min, max}

`Iterator::{min, max}` can't be used with iterators of floats due to NaN issues. This suggests a workaround in the documentation of those functions.
  • Loading branch information
GuillaumeGomez authored May 27, 2021
2 parents 6ac83e1 + b00f6fc commit e30192a
Showing 1 changed file with 26 additions and 2 deletions.
28 changes: 26 additions & 2 deletions library/core/src/iter/traits/iterator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2568,6 +2568,18 @@ pub trait Iterator {
/// If several elements are equally maximum, the last element is
/// returned. If the iterator is empty, [`None`] is returned.
///
/// Note that [`f32`]/[`f64`] doesn't implement [`Ord`] due to NaN being
/// incomparable. You can work around this by using [`Iterator::reduce`]:
/// ```
/// assert_eq!(
/// vec![2.4, f32::NAN, 1.3]
/// .into_iter()
/// .reduce(f32::max)
/// .unwrap(),
/// 2.4
/// );
/// ```
///
/// # Examples
///
/// Basic usage:
Expand All @@ -2591,8 +2603,20 @@ pub trait Iterator {

/// Returns the minimum element of an iterator.
///
/// If several elements are equally minimum, the first element is
/// returned. If the iterator is empty, [`None`] is returned.
/// If several elements are equally minimum, the first element is returned.
/// If the iterator is empty, [`None`] is returned.
///
/// Note that [`f32`]/[`f64`] doesn't implement [`Ord`] due to NaN being
/// incomparable. You can work around this by using [`Iterator::reduce`]:
/// ```
/// assert_eq!(
/// vec![2.4, f32::NAN, 1.3]
/// .into_iter()
/// .reduce(f32::min)
/// .unwrap(),
/// 1.3
/// );
/// ```
///
/// # Examples
///
Expand Down

0 comments on commit e30192a

Please sign in to comment.