source: trunk/libs/newlib/src/newlib/libm/common/sf_trunc.c @ 452

Last change on this file since 452 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 1.3 KB
Line 
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__
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__
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) */
Note: See TracBrowser for help on using the repository browser.