re PR go/52358 (math FAILs on Solaris 8 and 9)

PR go/52358
math: Work around bug in Solaris 9 implementation of ldexp.

The bug is that ldexp(-1, -1075) should return -0, but the
Solaris 9 implementation returns +0.

From-SVN: r186913
This commit is contained in:
Ian Lance Taylor 2012-04-27 16:32:42 +00:00
parent f07bb470ae
commit 6c88c77ec7
1 changed files with 12 additions and 1 deletions

View File

@ -16,7 +16,18 @@ package math
func libc_ldexp(float64, int) float64
func Ldexp(frac float64, exp int) float64 {
return libc_ldexp(frac, exp)
r := libc_ldexp(frac, exp)
// Work around a bug in the implementation of ldexp on Solaris
// 9. If multiplying a negative number by 2 raised to a
// negative exponent underflows, we want to return negative
// zero, but the Solaris 9 implementation returns positive
// zero. This workaround can be removed when and if we no
// longer care about Solaris 9.
if r == 0 && frac < 0 && exp < 0 {
r = Copysign(0, frac)
}
return r
}
func ldexp(frac float64, exp int) float64 {