[BACK]Return to s_ceilf.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_ceilf.c between version 1.7 and 1.8

version 1.7, 2002/05/26 22:01:54 version 1.8, 2008/04/25 22:21:53
Line 26  static const float huge = 1.0e30;
Line 26  static const float huge = 1.0e30;
 float  float
 ceilf(float x)  ceilf(float x)
 {  {
         int32_t i0,j0;          int32_t i0,jj0;
         u_int32_t i;          u_int32_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>(float)0.0) {/* return 0*sign(x) if |x|<1 */                  if(huge+x>(float)0.0) {/* return 0*sign(x) if |x|<1 */
                     if(i0<0) {i0=0x80000000;}                      if(i0<0) {i0=0x80000000;}
                     else if(i0!=0) { i0=0x3f800000;}                      else if(i0!=0) { i0=0x3f800000;}
                 }                  }
             } 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>(float)0.0) { /* raise inexact flag */                  if(huge+x>(float)0.0) { /* raise inexact flag */
                     if(i0>0) i0 += (0x00800000)>>j0;                      if(i0>0) i0 += (0x00800000)>>jj0;
                     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.7  
changed lines
  Added in v.1.8

CVSweb <webmaster@jp.NetBSD.org>