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 long
11llroundl (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.0L;
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 > (double) LONG_LONG_MAX
30 || res < (double) LONG_LONG_MIN)
31 {
32 errno = ERANGE;
33 /* Undefined behaviour, so we could return anything. */
34 /* return res > 0.0 ? LONG_LONG_MAX : LONG_LONG_MIN; */
35 }
36 return (long long) res;
37}
38