On Tue, Apr 19, 2011 at 12:57:23PM +0100, Peter Maydell wrote: > On 18 April 2011 21:59, Aurelien Jarno <aurel...@aurel32.net> wrote: > > > @@ -6349,6 +6352,12 @@ float32 float32_scalbn( float32 a, int n > > STATUS_PARAM ) > > else if ( aSig == 0 ) > > return a; > > > > + if (n > 0x80) { > > + n = 0x80; > > + } else if (n < -0x80) { > > + n = -0x80; > > + } > > + > > aExp += n - 1; > > aSig <<= 7; > > return normalizeRoundAndPackFloat32( aSign, aExp, aSig STATUS_VAR ); > > I don't think your if() condition is right here. Consider the > float32 00800000 (1.0 * 2 ^ -126 ; the smallest possible normalised > number); you can multiply this by, say, 2^253, without overflowing > to infinity. However your if() here means we'll incorrectly > compute the result of multiplying by 2^128 instead. s/0x80/0x200/ > should work. >
Correct, will be fixed in the next version. -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurel...@aurel32.net http://www.aurel32.net