1 /*
2  * ====================================================
3  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
4  *
5  * Developed at SunPro, a Sun Microsystems, Inc. business.
6  * Permission to use, copy, modify, and distribute this
7  * software is freely granted, provided that this notice
8  * is preserved.
9  * ====================================================
10  */
11 
12 #include "fdlibm.h"
13 
14 #ifdef __STDC__
truncf(float x)15 	float truncf(float x)
16 #else
17 	float truncf(x)
18 	float x;
19 #endif
20 {
21   __int32_t signbit, w, exponent_less_127;
22 
23   GET_FLOAT_WORD(w,x);
24 
25   /* Extract sign bit. */
26   signbit = w & 0x80000000;
27 
28   /* Extract exponent field. */
29   exponent_less_127 = ((w & 0x7f800000) >> 23) - 127;
30 
31   if (exponent_less_127 < 23)
32     {
33       if (exponent_less_127 < 0)
34         {
35           /* -1 < x < 1, so result is +0 or -0. */
36           SET_FLOAT_WORD(x, signbit);
37         }
38       else
39         {
40           SET_FLOAT_WORD(x, signbit | (w & ~(0x007fffff >> exponent_less_127)));
41         }
42     }
43   else
44     {
45       if (exponent_less_127 == 255)
46         /* x is NaN or infinite. */
47         return x + x;
48 
49       /* All bits in the fraction field are relevant. */
50     }
51   return x;
52 }
53 
54 #ifdef _DOUBLE_IS_32BITS
55 
56 #ifdef __STDC__
trunc(double x)57 	double trunc(double x)
58 #else
59 	double trunc(x)
60 	double x;
61 #endif
62 {
63 	return (double) truncf((float) x);
64 }
65 
66 #endif /* defined(_DOUBLE_IS_32BITS) */
67