Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/libs/musl/src/math/ceil.c
4397 views
1
#include "libm.h"
2
3
#if FLT_EVAL_METHOD==0 || FLT_EVAL_METHOD==1
4
#define EPS DBL_EPSILON
5
#elif FLT_EVAL_METHOD==2
6
#define EPS LDBL_EPSILON
7
#endif
8
9
double __cdecl ceil(double x)
10
{
11
union {double f; uint64_t i;} u = {x};
12
int e = (u.i >> 52 & 0x7ff) - 0x3ff;
13
double_t y;
14
15
if (e >= 52)
16
return x;
17
if (e >= 0) {
18
uint64_t m = 0x000fffffffffffffULL >> e;
19
if ((u.i & m) == 0)
20
return x;
21
if (u.i >> 63 == 0)
22
u.i += m;
23
u.i &= ~m;
24
} else {
25
if (u.i >> 63)
26
return -0.0;
27
if (u.i << 1)
28
return 1.0;
29
}
30
return u.f;
31
}
32
33