[BACK]Return to s_truncf.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libm / src

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/lib/libm/src/s_truncf.c between version 1.3 and 1.4

version 1.3, 2007/01/17 23:24:22 version 1.4, 2008/04/25 22:21:53
Line 35  static const float huge = 1.0e30F;
Line 35  static const float huge = 1.0e30F;
 float  float
 truncf(float x)  truncf(float x)
 {  {
         int32_t i0,j0;          int32_t i0,jj0;
         uint32_t i;          uint32_t i;
         GET_FLOAT_WORD(i0,x);          GET_FLOAT_WORD(i0,x);
         j0 = ((i0>>23)&0xff)-0x7f;          jj0 = ((i0>>23)&0xff)-0x7f;
         if(j0<23) {          if(jj0<23) {
             if(j0<0) {  /* raise inexact if x != 0 */              if(jj0<0) {         /* raise inexact if x != 0 */
                 if(huge+x>0.0F)         /* |x|<1, so return 0*sign(x) */                  if(huge+x>0.0F)         /* |x|<1, so return 0*sign(x) */
                     i0 &= 0x80000000;                      i0 &= 0x80000000;
             } else {              } else {
                 i = (0x007fffff)>>j0;                  i = (0x007fffff)>>jj0;
                 if((i0&i)==0) return x; /* x is integral */                  if((i0&i)==0) return x; /* x is integral */
                 if(huge+x>0.0F)         /* raise inexact flag */                  if(huge+x>0.0F)         /* raise inexact flag */
                     i0 &= (~i);                      i0 &= (~i);
             }              }
         } else {          } else {
             if(j0==0x80) return x+x;    /* inf or NaN */              if(jj0==0x80) return x+x;   /* inf or NaN */
             else return x;              /* x is integral */              else return x;              /* x is integral */
         }          }
         SET_FLOAT_WORD(x,i0);          SET_FLOAT_WORD(x,i0);

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

CVSweb <webmaster@jp.NetBSD.org>