After adding tests, the current implementation for fminimum fails when
provided a negative zero and NaN as inputs:
---- math::fminimum_fmaximum_num::tests::fmaximum_num_spec_tests_f64 stdout ----
thread 'math::fminimum_fmaximum_num::tests::fmaximum_num_spec_tests_f64' panicked at libm/src/math/fminimum_fmaximum_num.rs:240:13:
fmaximum_num(-0x0p+0, NaN)
l: NaN (0x7ff8000000000000)
r: -0.0 (0x8000000000000000)
---- math::fminimum_fmaximum_num::tests::fmaximum_num_spec_tests_f32 stdout ----
thread 'math::fminimum_fmaximum_num::tests::fmaximum_num_spec_tests_f32' panicked at libm/src/math/fminimum_fmaximum_num.rs:240:13:
fmaximum_num(-0x0p+0, NaN)
l: NaN (0x7fc00000)
r: -0.0 (0x80000000)
Add more thorough spec tests for these functions and correct the
implementations.
Canonicalization is also moved to a trait method to centralize
documentation about what it does and doesn't do.
libm
A Rust implementations of the C math library.
Usage
libm provides fallback implementations for Rust's float math functions in
core, and the core_float_math feature. If what is available suits your
needs, there is no need to add libm as a dependency.
If more functionality is needed, this crate can also be used directly:
[dependencies]
libm = "0.2.11"
Contributing
Please check CONTRIBUTING.md
Minimum Rust version policy
This crate supports rustc 1.63 and newer.
License
Usage is under the MIT license, available at https://opensource.org/license/mit.
Contribution
Contributions are licensed under both the MIT license and the Apache License, Version 2.0, available at https://www.apache.org/licenses/LICENSE-2.0. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as mentioned, without any additional terms or conditions.
See LICENSE.txt for full details.