[PATCH] hypotf fails for denormal inputs

Bob Wilson bwilson@tensilica.com
Mon Aug 1 19:09:00 GMT 2005


The hypotf function in newlib gives incorrect results for denormal input values. 
  The problem occurs when the values are scaled by 2^126 because the scaling 
value is incorrectly specified without the exponent bias.  The test program 
below will demonstrate the problem -- without the patch, the value returned by 
hypotf will be zero.

(I noticed that other small but non-denormal values are scaled by 2^68 by adding 
68 to the exponent, in which case the exponent bias is not included.  For the 
denorm case, the value must be multiplied so the result will be normalized. 
Presumably someone overlooked this distinction and forgot to add the exponent 
bias for the denorm case.)


#include <math.h>
unsigned int ta = 0x80000002;
main ()
{
   float a = *(float *)&ta;
   float c = hypotf(a, a);
   float d = hypot(a, a);
   printf("a = %e hypotf(a,a) = %e hypot(a,a) = %e\n", a, c, d);
}


2005-08-01  Bob Wilson  <bob.wilson@acm.org>

         * libm/math/ef_hypot.c (__ieee754_hypotf): Add missing exponent bias
         to the value for 2^126.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: hypotf-denorm.patch
Type: text/x-patch
Size: 533 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/newlib/attachments/20050801/44f6d664/attachment.bin>


More information about the Newlib mailing list