Subject: Re: ldexp NetBSD 3.0 amd64 bug
To: Brendon Costa <bcosta@avdat.com.au>
From: Tobias Nygren <tnn+nbsd@nygren.pp.se>
List: port-amd64
Date: 03/20/2006 23:35:11
Brendon Costa wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hi All,
>
> 	I just came across a bug in NetBSD 3.0 amd64 port. It may have
> already been fixed in current, but I was unable to test this. The
> problem is with the ldexp() function. It seems to just return the
> value of the float value provided without multiplying it by 2
> ^ exp as expected. Note: It works fine with the i386 port.
>
> A small test program:
>
> #include <iostream>
> #include <cmath>
> using namespace std;
>
> int main()
> {
>    for (float f = 0.0f; f < 2.1; f += 0.5f)
>    {
>       for (int exp = 0; exp < 5; exp++)
>       {
>          float result = ldexp(f, exp);
>          cout << f << " * 2 ^ " << exp << " = " << result << endl;
>       }
>    }
>    return 0;
> }
>
>   
[snip]
> Thanks,
> Brendon.
>   

Can confirm this on 3.99.17.
The problem is actually in scalbn() and not ldexp().
After a glance at the code for scalbn() I'm not really surprised that 
there could be bugs lurking within. Wow.