Fix exponent wrapping in Math.frexp(BigFloat)
for very large values
#14971
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
BigFloat
s represent their base-256 ** sizeof(LibGMP::MpLimb)
exponent with aLibGMP::MpExp
field, butLibGMP.mpf_get_d_2exp
only returns the base-2 exponent as aLibC::Long
, so values outside(2.0.to_big_f ** -0x80000001)...(2.0.to_big_f ** 0x7FFFFFFF)
lead to an exponent overflow on Windows or 32-bit platforms:This PR fixes it by computing the exponent ourselves.