-
- Notifications
You must be signed in to change notification settings - Fork 37
Open
Description
The base assumption is that min(a, b) == min(b, a), and same for max.
This is not true when values are not comparable (= when PartialOrd::partial_cmp would return None) because, in that case, these two methods always return the right hand side.
In other words, a.simd_min(b) == b but b.simd_min(a) == a when a.partial_cmp(b) == None.
This happens, for instance, when comparing a regular f32 and f32::NAN:
let number = 1.0f32; let nan = f32::NAN; println!("{}", number.simd_min(nan)); // Prints "NaN" println!("{}", nan.simd_min(number)); // Prints "1"This happens because the current implementation of simd_min is the following:
fn simd_min(self, other: Self) -> Self { if self <= other { self } else { other } }and a <= (or any syntax-sugared comparison in general) between two instances PartialOrd where a.partial_ord(&b) returns None is evaluated to false.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels