Commit graph

81 commits

Author SHA1 Message Date
Mazdak Farrokhzad
68597c7641
Rollup merge of #63698 - Phosphorus15:master, r=nagisa
Fixed floating point issue with asinh function

This should fixes #63271 , in which `asinh(-0.0)` returns `0.0` instead of `-0.0`.
according to @nagisa
>
>
> IEEE-754 (2008), section 9.2.1:
>
> > For the functions expm1, exp2m1, exp10m1, logp1, log2p1, log10p1, sin, tan, sinPi, atanPi, asin, atan, sinh, tanh, asinh, and atanh, f(+0) is +0 and f(−0) is −0 with no exception.
>
> and
>
> > sinh(±∞) and asinh(±∞) are ±∞ with no exception.

After ensuring that the function `asinh` is the only function affected (functions like `sin`, `sinh` are all based on `cmath` library or `llvm` intrinsics), and that `atanh` always gives the correct result. The only function to modify is `asinh`.
2019-08-27 08:17:49 +02:00
Tomasz Różański
cdedd268d2 Make use of existing constants.
f32::consts::PI / 2.0 -> f32::consts::FRAC_PI_2
f32::consts::PI / 4.0 -> f32::consts::FRAC_PI_4
f64::consts::PI / 2.0 -> f64::consts::FRAC_PI_2
f64::consts::PI / 4.0 -> f64::consts::FRAC_PI_4
2019-08-22 14:59:31 +02:00
Tomasz Różański
3b04e91d27 Change code formatting for readability. 2019-08-22 14:27:51 +02:00
Phosphorus15
e33d8707c8 Refined implementations of asinh and acosh 2019-08-20 15:12:41 +08:00
Phosphorus15
535efa4afd Used copysign to avoid unnecessary branches. 2019-08-20 12:39:12 +08:00
Phosphorus15
64e3a10a82 test cases for both f32 and f64 on asinh(-0.0) 2019-08-19 17:29:37 +08:00
Phosphorus15
c4569347b2 Added negative cases for asinh according to IEEE-754. 2019-08-19 17:22:08 +08:00
CrLF0710
72ac8ce9aa Stablize Euclidean Modulo (feature euclidean_division) 2019-07-07 12:16:13 +08:00
Yuki Okushi
43ab14e2f4 Use stable wrappers 2019-06-08 09:36:46 +09:00
Will Hakes
350e492bc0 Change copytest parameter name from y to sign 2019-04-05 20:30:45 -06:00
CrLF0710
d9bdd01ac0 Stablize {f32,f64}::copysign(). 2019-03-29 03:20:50 +08:00
Tobias Bucher
0bb36a2f90 Clarify {Ord,f32,f64}::clamp docs a little
Explicitly call out when it returns NaN, adhere to the panic doc
guidelines.
2019-03-25 12:52:42 +01:00
Jacob Kiesel
72f5d9137e Fix f64 test 2019-03-20 16:59:46 -06:00
Jacob Kiesel
e2b5a0334d Fix formatting and add unit tests for panic cases 2019-03-20 15:16:50 -06:00
Jacob Kiesel
2f8d9a23ee Add NAN test to docs 2019-03-20 15:07:16 -06:00
Mazdak Farrokhzad
5abd9c7d15
Rollup merge of #58812 - jonhoo:floor_v_trunc, r=alexcrichton
Clarify distinction between floor() and trunc()

`floor()` rounds towards `-INF`, `trunc()` rounds towards 0.
This PR clarifies this in the examples.
2019-03-19 15:16:50 +01:00
bors
70d1150478 Auto merge of #58710 - EdorianDark:master, r=sfackler
Add clamp for ranges. Implements #44095

Ready for merge
2019-03-15 06:23:21 +00:00
Dirk Leifeld
6041ec3b78 add feature clamp 2019-03-09 20:10:48 +01:00
Dirk Leifeld
bd2e12609f Revert "Revert "Add clamp functions"" 2019-03-09 19:16:54 +01:00
Jon Gjengset
c5fe4055a9
Clarify distinction between floor() and trunc() 2019-02-28 10:23:20 -05:00
Taiki Endo
93b6d9e086 libstd => 2018 2019-02-28 04:06:15 +09:00
Alexander Regueiro
b87363e763 tests: doc comments 2019-02-10 23:42:32 +00:00
Mark Rousskov
2a663555dd Remove licenses 2018-12-25 21:08:33 -07:00
Nicole Mazzuca
e36b62873f rename div_euc -> div_euclid, and mod_euc -> rem_euclid
logic is written up in https://github.com/rust-lang/rust/issues/49048

Also, update the documentation slightly
2018-12-17 16:41:48 -08:00
Tobias Bucher
967b1fc3b7 Fix a small mistake regarding NaNs in a deprecation message
`max` on floats returns the other argument if one of them is NaN, which
would be `0.0` in this case. This is unlike the C functions `fdim` and
`fdimf` which return NaN if either of their arguments is NaN.

https://doc.rust-lang.org/1.31.0/std/primitive.f32.html#method.max
https://en.cppreference.com/w/c/numeric/math/fdim
2018-12-15 18:41:21 +01:00
Alexander Regueiro
ee89c088b0 Various minor/cosmetic improvements to code 2018-12-07 23:53:34 +00:00
Raph Levien
538f65eb61 Fix doc for new copysign functions
Thanks to @LukasKalbertodt for catching this. Addresses a comment
raised in #55169 after it was merged.
2018-10-24 15:19:23 -07:00
Raph Levien
f08db6bf1e Add must_use on copysign
Added a #[must_use] annotation on copysign, per review feedback.
2018-10-18 08:35:09 -07:00
Raph Levien
9a2e7026dc Fix inconsistent documentation
I improved the f32 version and made a copy-paste error for f64.
2018-10-17 21:09:55 -07:00
Raph Levien
0e6c3f29be Add a copysign function to f32 and f64
This patch adds a `copysign` function to the float primitive types.
It is an exceptionally useful function for writing efficient numeric
code, as it often avoids branches, is auto-vectorizable, and there
are efficient intrinsics for most platforms.

I think this might work as-is, as the relevant `copysign` intrinsic
is already used internally for the implementation of `signum`. It's
possible that an implementation might be needed in japaric/libm for
portability across all platforms, in which case I'll do that also.

Part of the work towards #55107
2018-10-17 18:15:00 -07:00
Fabian Kössel
daeadc6c2e Clarify rational behind current implementation of .mod_euc() 2018-06-26 13:09:56 +02:00
Fabian Kössel
af6f0f2e10 Document round-off error in .mod_euc()-method, see issue #50179 2018-06-26 13:09:55 +02:00
Mark Simulacrum
9e3432447a Switch to 1.26 bootstrap compiler 2018-05-17 08:47:25 -06:00
Corey Farwell
2c4b152356 Add “Examples” section header in f32/f64 doc comments.
This is recommend by [RFC 0505] and as far as I know, the only primitive
types without this heading.

[RFC 0505]: c892139be6/text/0505-api-comment-conventions.md (using-markdown)
2018-05-13 15:54:40 -04:00
Alex Crichton
c798cbbb2c
Rollup merge of #50588 - ExpHP:i-can-see-my-house-from-here, r=frewsxcv
Move "See also" disambiguation links for primitive types to top

Closes #50384.

<details>
<summary>Images</summary>

![rust-slice](https://user-images.githubusercontent.com/1411280/39843148-caa41c3e-53b7-11e8-8123-b57c25a4d9e0.png)

![rust-isize](https://user-images.githubusercontent.com/1411280/39843146-ca94b384-53b7-11e8-85f3-3f5e5d353a05.png)

</details>

r? @steveklabnik
2018-05-10 11:35:33 -05:00
Michael Lamparski
8010604b2d move See also links to top 2018-05-09 18:30:32 -04:00
Corey Farwell
0ba1c101dc Clarify in the docs that mul_add is not always faster.
Fixes https://github.com/rust-lang/rust/issues/49842.

Other resources:

- https://users.rust-lang.org/t/why-does-the-mul-add-method-produce-a-more-accurate-result-with-better-performance/1626
- https://en.wikipedia.org/wiki/Multiply%E2%80%93accumulate_operation
2018-05-09 06:47:37 -07:00
Simon Sapin
18ab16b510 Move intrinsics-based float methods out of libcore into libstd
Affected methods are `abs`, `signum`, and `powi`.
CC https://github.com/rust-lang/rust/issues/32110#issuecomment-379503183
2018-04-21 09:47:37 +02:00
Simon Sapin
8a374f2827 Add some f32 and f64 inherent methods in libcore
… previously in the unstable core::num::Float trait.

Per https://github.com/rust-lang/rust/issues/32110#issuecomment-379503183,
the `abs`, `signum`, and `powi` methods are *not* included for now
since they rely on LLVM intrinsics and we haven’t determined yet whether
those instrinsics lower to calls to libm functions on any platform.
2018-04-21 09:47:37 +02:00
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