pthread_mutex_*.3: Add {get,set}prioceiling to SEE ALSO.
[dragonfly.git] / contrib / openbsd_libm / src / s_truncf.c
blob40cdcd93bdfb1cd55315e8bd14cac4c970dd7ab9
1 /* @(#)s_floor.c 5.1 93/09/24 */
2 /*
3 * ====================================================
4 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
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 * ====================================================
14 * truncf(x)
15 * Return x rounded toward 0 to integral value
16 * Method:
17 * Bit twiddling.
18 * Exception:
19 * Inexact flag raised if x not equal to truncf(x).
22 #include "math.h"
23 #include "math_private.h"
25 static const float huge = 1.0e30F;
27 float
28 truncf(float x)
30 int32_t i0,jj0;
31 u_int32_t i;
32 GET_FLOAT_WORD(i0,x);
33 jj0 = ((i0>>23)&0xff)-0x7f;
34 if(jj0<23) {
35 if(jj0<0) { /* raise inexact if x != 0 */
36 if(huge+x>0.0F) /* |x|<1, so return 0*sign(x) */
37 i0 &= 0x80000000;
38 } else {
39 i = (0x007fffff)>>jj0;
40 if((i0&i)==0) return x; /* x is integral */
41 if(huge+x>0.0F) /* raise inexact flag */
42 i0 &= (~i);
44 } else {
45 if(jj0==0x80) return x+x; /* inf or NaN */
46 else return x; /* x is integral */
48 SET_FLOAT_WORD(x,i0);
49 return x;