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. The others look OK to me. I would personally prefer to retain the int16 etc rather than moving to int16_t, but I don't quite feel strongly enough to argue about it. -- PMM