1
0
mirror of https://github.com/golang/go synced 2024-11-24 17:30:18 -07:00

Added a comment and some more tests

This commit is contained in:
Dmitry Panov 2022-12-28 22:55:02 +00:00
parent 9a6d4584a8
commit 3bfbd85c4c
2 changed files with 14 additions and 3 deletions

View File

@ -1688,8 +1688,11 @@ var vfpowSC = [][2]float64{
{Nextafter(-1, 2), float64(1 << 63)}, {Nextafter(-1, 2), float64(1 << 63)},
{Nextafter(-1, -2), float64(1 << 63)}, {Nextafter(-1, -2), float64(1 << 63)},
// Issue #57465, exponent is an even number that overflows int64 // Issue #57465
{Copysign(0, -1), 1e19}, {Copysign(0, -1), 1e19},
{Copysign(0, -1), -1e19},
{Copysign(0, -1), 1<<53 - 1},
{Copysign(0, -1), -(1<<53 - 1)},
} }
var powSC = []float64{ var powSC = []float64{
0, // pow(-Inf, -Pi) 0, // pow(-Inf, -Pi)
@ -1766,8 +1769,11 @@ var powSC = []float64{
0, // pow(Nextafter(-1, 2), float64(1 << 63)) 0, // pow(Nextafter(-1, 2), float64(1 << 63))
Inf(1), // pow(Nextafter(-1, -2), float64(1 << 63)) Inf(1), // pow(Nextafter(-1, -2), float64(1 << 63))
// Issue #57465, exponent is an even number that overflows int64 // Issue #57465
0, 0, // pow(-0, 1e19)
Inf(1), // pow(-0, -1e19)
Copysign(0, -1), // pow(-0, 1<<53 -1)
Inf(-1), // pow(-0, -(1<<53 -1))
} }
var vfpow10SC = []int{ var vfpow10SC = []int{

View File

@ -6,6 +6,11 @@ package math
func isOddInt(x float64) bool { func isOddInt(x float64) bool {
if Abs(x) >= (1 << 53) { if Abs(x) >= (1 << 53) {
// 1 << 53 is the largest exact integer in the float64 format.
// Any number outside this range will be truncated before the decimal point and therefore will always be
// an even integer.
// Without this check and if x overflows int64 the int64(xi) conversion below may produce incorrect results
// on some architectures (and does so on arm64). See issue #57465.
return false return false
} }