mirror of
https://github.com/fastfloat/fast_float.git
synced 2026-10-28 18:07:16 +08:00
Merge branch 'main' of https://github.com/fastfloat/fast_float
This commit is contained in:
commit
c982adabbd
@ -63,9 +63,15 @@ namespace detail {
|
|||||||
* -ceil(p) + q
|
* -ceil(p) + q
|
||||||
* where
|
* where
|
||||||
* p = log(5**-q)/log(2) = -q * log(5)/log(2)
|
* p = log(5**-q)/log(2) = -q * log(5)/log(2)
|
||||||
|
*
|
||||||
|
* The shift must floor towards negative infinity, as an arithmetic right
|
||||||
|
* shift does, but right-shifting a negative value is implementation-defined
|
||||||
|
* before C++20. Biasing the product by 2048 * 65536 keeps the shifted value
|
||||||
|
* non-negative without changing the result: the bias is a multiple of 2^16
|
||||||
|
* and is removed again after the shift.
|
||||||
*/
|
*/
|
||||||
constexpr fastfloat_inline am_pow_t power(am_pow_t const q) noexcept {
|
constexpr fastfloat_inline am_pow_t power(am_pow_t const q) noexcept {
|
||||||
return (((152170 + 65536) * q) >> 16) + 63;
|
return (((152170 + 65536) * q + (2048 * 65536)) >> 16) - 2048 + 63;
|
||||||
}
|
}
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user