master
 1/**
 2 * This file has no copyright assigned and is placed in the Public Domain.
 3 * This file is part of the mingw-w64 runtime package.
 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 5 */
 6#include <math.h>
 7#include <limits.h>
 8#include <errno.h>
 9
10long
11lroundl (long double x)
12{
13  long double res;
14
15  if (x >= 0.0L)
16    {
17      res = ceill (x);
18      if (res - x > 0.5L)
19	res -= 1.0;
20    }
21  else
22    {
23      res = ceill (-x);
24      if (res + x > 0.5L)
25	res -= 1.0L;
26      res = -res;
27    }
28  if (!isfinite (res)
29      || res > (long double)LONG_MAX
30      || res < (long double)LONG_MIN)
31    {
32      errno = ERANGE;
33      /* Undefined behaviour, so we could return anything.  */
34      /* return res > 0.0L ? LONG_MAX : LONG_MIN;  */
35    }
36  return (long) res;
37}