source: trunk/libs/newlib/src/newlib/libm/common/sf_round.c @ 567

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

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

File size: 1.6 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 roundf(float x)
16#else
17        float roundf(x)
18        float x;
19#endif
20{
21  __uint32_t w;
22  /* Most significant word, least significant word. */
23  int exponent_less_127;
24
25  GET_FLOAT_WORD(w, x);
26
27  /* Extract exponent field. */
28  exponent_less_127 = (int)((w & 0x7f800000) >> 23) - 127;
29
30  if (exponent_less_127 < 23)
31    {
32      if (exponent_less_127 < 0)
33        {
34          w &= 0x80000000;
35          if (exponent_less_127 == -1)
36            /* Result is +1.0 or -1.0. */
37            w |= ((__uint32_t)127 << 23);
38        }
39      else
40        {
41          unsigned int exponent_mask = 0x007fffff >> exponent_less_127;
42          if ((w & exponent_mask) == 0)
43            /* x has an integral value. */
44            return x;
45
46          w += 0x00400000 >> exponent_less_127;
47          w &= ~exponent_mask;
48        }
49    }
50  else
51    {
52      if (exponent_less_127 == 128)
53        /* x is NaN or infinite. */
54        return x + x;
55      else
56        return x;
57    }
58  SET_FLOAT_WORD(x, w);
59  return x;
60}
61
62#ifdef _DOUBLE_IS_32BITS
63
64#ifdef __STDC__
65        double round(double x)
66#else
67        double round(x)
68        double x;
69#endif
70{
71        return (double) roundf((float) x);
72}
73
74#endif /* defined(_DOUBLE_IS_32BITS) */
Note: See TracBrowser for help on using the repository browser.