gonzui


Format: Advanced Search

t2ex/bsd_source/lib/libc/src_bsd/math/s_truncf.cbare sourcepermlink (0.02 seconds)

Search this content:

    1: /* @(#)s_floor.c 5.1 93/09/24 */
    2: /*
    3:  * ====================================================
    4:  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
    5:  *
    6:  * Developed at SunPro, a Sun Microsystems, Inc. business.
    7:  * Permission to use, copy, modify, and distribute this
    8:  * software is freely granted, provided that this notice
    9:  * is preserved.
   10:  * ====================================================
   11:  */
   12: 
   13: #if 0
   14: #include <sys/cdefs.h>
   15: __FBSDID("$FreeBSD: src/lib/msun/src/s_truncf.c,v 1.1 2004/06/20 09:25:43 das Exp $");
   16: #endif
   17: 
   18: /*
   19:  * truncf(x)
   20:  * Return x rounded toward 0 to integral value
   21:  * Method:
   22:  *      Bit twiddling.
   23:  * Exception:
   24:  *      Inexact flag raised if x not equal to truncf(x).
   25:  */
   26: 
   27: #include "math.h"
   28: #include "math_private.h"
   29: 
   30: static const float huge = 1.0e30F;
   31: 
   32: float
   33: truncf(float x)
   34: {
   35:         int32_t i0,jj0;
   36:         u_int32_t i;
   37:         GET_FLOAT_WORD(i0,x);
   38:         jj0 = ((i0>>23)&0xff)-0x7f;
   39:         if(jj0<23) {
   40:             if(jj0<0) {        /* raise inexact if x != 0 */
   41:                 if(huge+x>0.0F)               /* |x|<1, so return 0*sign(x) */
   42:                     i0 &= 0x80000000;
   43:             } else {
   44:                 i = (0x007fffff)>>jj0;
   45:                 if((i0&i)==0) return x; /* x is integral */
   46:                 if(huge+x>0.0F)               /* raise inexact flag */
   47:                     i0 &= (~i);
   48:             }
   49:         } else {
   50:             if(jj0==0x80) return x+x;  /* inf or NaN */
   51:             else return x;             /* x is integral */
   52:         }
   53:         SET_FLOAT_WORD(x,i0);
   54:         return x;
   55: }