Commit graph

42 commits

Author SHA1 Message Date
Fabian Zaiser
ece87c3f4e Address nits and tidy errors. 2018-03-28 01:41:40 +02:00
Fabian Zaiser
9255bbd035 Implement RFC #2169 (Euclidean division).
Tracking issue: #49048
2018-03-26 20:25:42 +02:00
Maxwell Borden
c116b0e829 Fixed clockwise/counter-clockwise in atan2 documentation in f32 and f64
and included that it returns radians
2018-03-21 18:11:57 -07:00
Matthias Krüger
161e8ffda7 typo: correct endianess to endianness (this also changes function names!) 2018-02-11 00:56:24 +01:00
bors
a538fe7ce7 Auto merge of #46931 - clarcharr:float_bits_core, r=alexcrichton
Expose float from_bits and to_bits in libcore.

These methods have no dependencies on libm and thus should be offered in libcore.
2018-01-24 03:02:15 +00:00
Trevor Spiteri
6d82e7814f remove implementation detail from doc 2018-01-09 12:26:00 +01:00
Trevor Spiteri
0eba4c206a doc: show that f32::log and f64::log are not correctly rounded 2018-01-08 19:22:37 +01:00
Clar Charr
a2cdeb58f6 Expose float from_bits and to_bits in libcore. 2017-12-22 21:52:52 -05:00
Clar Charr
ebdd667d40 Make core::f32/f64 docs match std. 2017-12-21 20:32:07 -05:00
bors
85d50ce1c7 Auto merge of #46012 - Gankro:float-conv-transmute, r=sfackler
Make float::from_bits transmute

See commit message for details.

See also this discussion here: https://github.com/rust-lang/rust/issues/40470#issuecomment-343803381

(may require libs team discussion before merging)
2017-11-24 10:06:09 +00:00
Alexis Beingessner
439576fd7b Make float::from_bits transmute (and update the documentation to reflect this).
The current implementation/documentation was made to avoid sNaN because of
potential safety issues implied by old/bad LLVM documentation. These issues
aren't real, so we can just make the implementation transmute (as permitted
by the existing documentation of this method).

Also the documentation didn't actually match the behaviour: it said we may
change sNaNs, but in fact we canonicalized *all* NaNs.

Also an example in the documentation was wrong: it said we *always* change
sNaNs, when the documentation was explicitly written to indicate it was
implementation-defined.

This makes to_bits and from_bits perfectly roundtrip cross-platform, except
for one caveat: although the 2008 edition of IEEE-754 specifies how to
interpet the signaling bit, earlier editions didn't. This lead to some platforms
picking the opposite interpretation, so all signaling NaNs on x86/ARM are quiet
on MIPS, and vice-versa.

NaN-boxing is a fairly important optimization, while we don't even guarantee
that float operations properly preserve signalingness. As such, this seems like
the more natural strategy to take (as opposed to trying to mangle the signaling
bit on a per-platform basis).

This implementation is also, of course, faster.
2017-11-23 16:55:52 -05:00
Marco A L Barbosa
941852eef3 Fix some docs summary nits 2017-11-20 14:46:31 -02:00
Alex Crichton
348930eb4e std: Move the cmath module into the sys module
This commit moves the `f32::cmath` and `f64::cmath` modules into the
`sys` module. Note that these are not publicly exported modules, simply
implementation details. These modules are already platform-specific with
shims on MSVC and this is mostly just a reflection of that reality. This
should also help cut down on `#[cfg]` traffic if platforms are brought on
which don't directly support these functions.
2017-11-08 20:42:23 -08:00
Jacob Kiesel
db5b5f9706 Revert "Add clamp functions"
This reverts commit c589f867f8.
2017-09-08 16:07:21 -06:00
Jacob Kiesel
63f4dab0f5 Revert "Add NAN examples"
This reverts commit f74c5d2e18.
2017-09-08 16:07:19 -06:00
Jacob Kiesel
15d3eeaf65 Revert "Fix f64 examples"
This reverts commit 576426a05a.
2017-09-08 16:07:15 -06:00
Jacob Kiesel
8b96167004 Revert "Fix documentation and formatting."
This reverts commit 2e34ff7671.
2017-09-08 16:07:13 -06:00
Jacob Kiesel
67283fa8e6 Revert "Add panic unit tests"
This reverts commit b762283e57.
2017-09-08 16:07:09 -06:00
Jacob Kiesel
b762283e57 Add panic unit tests 2017-09-04 21:39:46 -06:00
Jacob Kiesel
2e34ff7671 Fix documentation and formatting. 2017-09-01 00:07:26 -06:00
Jacob Kiesel
576426a05a Fix f64 examples 2017-08-26 17:54:51 -06:00
Jacob Kiesel
f74c5d2e18 Add NAN examples 2017-08-26 10:36:14 -06:00
Jacob Kiesel
c589f867f8 Add clamp functions 2017-08-26 10:21:17 -06:00
est31
ffefc9aa1c float_bits_conv made it into 1.20 2017-07-18 05:16:46 +02:00
est31
010dea13ee Stabilize float_bits_conv 2017-07-06 15:18:06 +02:00
est31
3ba0f07f08 Make sNaN removal code tolerate different sNaN encodings
IEEE 754-1985 specifies the encoding of NaN floating point numbers,
but while it mentions that NaNs can be subdivided into signaling
and quiet ones, it doesn't fix the encoding of signaling NaNs in binary
formats. This led to different implementations (CPUs) having different
encodings. IEEE 754-2008 finally specified the encoding of signaling NaNs
but some architectures are compatible with it, while others aren't.
Certain MIPS and PA-RISC CPUs have different encodings for signaling
NaNs.

In order to have the float <-> binary cast feature of the std library be
portable to them, we don't mask any quiet NaNs like we did before (only
being compliant to IEEE 754-2008 and nothing else), but instead we
simply pass a known good NaN instead.

Note that in the code removed there was a bug; the 64 bit mask for quiet
NaNs should have been `0x0008000000000000` instead of the specified
`0x0001000000000000`.
2017-07-03 21:51:36 +02:00
bors
88c3242ef2 Auto merge of #42431 - nagisa:core-float-2, r=alexcrichton
Fix NaN handling in is_sign_negative/positive

This would be my proposed fix for the #42425 provided we decide it is indeed a problem.

Note this would technically be a breaking change to a stable API. We might want to consider deprecating these methods and adding new ones.
2017-06-28 03:41:22 +00:00
Simonas Kazlauskas
3b9fe77bfc Fix NaN handling in is_sign_negative/positive
See #42425
2017-06-22 23:12:01 +03:00
bors
fe7227f6c8 Auto merge of #42430 - nagisa:core-float, r=alexcrichton
Re-implement float min/max in rust

This also adds the relevant implementations into libcore.

See #42423
2017-06-16 17:52:11 +00:00
Simonas Kazlauskas
ba6cf1d80a Re-implement float min/max in rust
See #42423
2017-06-14 21:58:17 +03:00
Marco A L Barbosa
405adb6d0c Ignore some failing test on wasm32-unknown-emscripten
See #42629 and #42630.
2017-06-13 10:46:54 -03:00
Josh Stone
c1aaa60d8d Remove float_extras
[unstable, deprecated since 1.11.0]
2017-04-20 21:16:31 -07:00
est31
873a3b0363 Allow us to remove masking in the future 2017-04-18 02:43:16 +02:00
est31
3993eb4a27 Preserve sNaN payload when converting them to quiet NaNs 2017-04-18 02:43:16 +02:00
est31
fc028b8180 Convert sNaN to quiet NaN instead of returning errors 2017-04-18 02:43:16 +02:00
est31
bdab5cdc63 assert_ne and tracking issue 2017-04-18 02:43:16 +02:00
est31
56760abf3b Add examples heading 2017-04-18 02:43:16 +02:00
est31
82eead0d0b Return Err(()) when trying to convert sNaN representation to float 2017-04-18 02:43:16 +02:00
est31
32a43da68a Add functions to safely transmute float to int 2017-04-18 02:43:16 +02:00
Paul Lange
4b4b1e1b25 Improve module description for std::f32 and std::f64.
Fixes #29353
2017-04-11 21:57:54 +02:00
Steve Klabnik
3eb8434150 Get linkchecker clean
This affects the book, some missed things in the reference, the grammar,
and the standard library. Whew!
2017-02-21 14:02:12 -05:00
Brian Anderson
6135cbc9e2 std: Flatten the num directory to reflect the module layout
This makes it dissimilar to how core is structured on disk, but
more predictable on its own.
2016-11-01 17:08:24 +00:00
Renamed from src/libstd/num/f64.rs (Browse further)