-
Notifications
You must be signed in to change notification settings - Fork 97
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #180 from varkor/min-max
Implement min, minf, max, maxf
- Loading branch information
Showing
7 changed files
with
95 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
#[inline] | ||
#[cfg_attr(all(test, assert_no_panic), no_panic::no_panic)] | ||
pub fn fmax(x: f64, y: f64) -> f64 { | ||
// IEEE754 says: maxNum(x, y) is the canonicalized number y if x < y, x if y < x, the | ||
// canonicalized number if one operand is a number and the other a quiet NaN. Otherwise it | ||
// is either x or y, canonicalized (this means results might differ among implementations). | ||
// When either x or y is a signalingNaN, then the result is according to 6.2. | ||
// | ||
// Since we do not support sNaN in Rust yet, we do not need to handle them. | ||
// FIXME(nagisa): due to https://bugs.llvm.org/show_bug.cgi?id=33303 we canonicalize by | ||
// multiplying by 1.0. Should switch to the `canonicalize` when it works. | ||
(if x.is_nan() || x < y { y } else { x }) * 1.0 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
#[inline] | ||
#[cfg_attr(all(test, assert_no_panic), no_panic::no_panic)] | ||
pub fn fmaxf(x: f32, y: f32) -> f32 { | ||
// IEEE754 says: maxNum(x, y) is the canonicalized number y if x < y, x if y < x, the | ||
// canonicalized number if one operand is a number and the other a quiet NaN. Otherwise it | ||
// is either x or y, canonicalized (this means results might differ among implementations). | ||
// When either x or y is a signalingNaN, then the result is according to 6.2. | ||
// | ||
// Since we do not support sNaN in Rust yet, we do not need to handle them. | ||
// FIXME(nagisa): due to https://bugs.llvm.org/show_bug.cgi?id=33303 we canonicalize by | ||
// multiplying by 1.0. Should switch to the `canonicalize` when it works. | ||
(if x.is_nan() || x < y { y } else { x }) * 1.0 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
#[inline] | ||
#[cfg_attr(all(test, assert_no_panic), no_panic::no_panic)] | ||
pub fn fmin(x: f64, y: f64) -> f64 { | ||
// IEEE754 says: minNum(x, y) is the canonicalized number x if x < y, y if y < x, the | ||
// canonicalized number if one operand is a number and the other a quiet NaN. Otherwise it | ||
// is either x or y, canonicalized (this means results might differ among implementations). | ||
// When either x or y is a signalingNaN, then the result is according to 6.2. | ||
// | ||
// Since we do not support sNaN in Rust yet, we do not need to handle them. | ||
// FIXME(nagisa): due to https://bugs.llvm.org/show_bug.cgi?id=33303 we canonicalize by | ||
// multiplying by 1.0. Should switch to the `canonicalize` when it works. | ||
(if y.is_nan() || x < y { x } else { y }) * 1.0 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
#[inline] | ||
#[cfg_attr(all(test, assert_no_panic), no_panic::no_panic)] | ||
pub fn fminf(x: f32, y: f32) -> f32 { | ||
// IEEE754 says: minNum(x, y) is the canonicalized number x if x < y, y if y < x, the | ||
// canonicalized number if one operand is a number and the other a quiet NaN. Otherwise it | ||
// is either x or y, canonicalized (this means results might differ among implementations). | ||
// When either x or y is a signalingNaN, then the result is according to 6.2. | ||
// | ||
// Since we do not support sNaN in Rust yet, we do not need to handle them. | ||
// FIXME(nagisa): due to https://bugs.llvm.org/show_bug.cgi?id=33303 we canonicalize by | ||
// multiplying by 1.0. Should switch to the `canonicalize` when it works. | ||
(if y.is_nan() || x < y { x } else { y }) * 1.0 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters