mq_notify: block all (application) signals in the worker thread
[musl] / src / math / rintf.c
1 #include <float.h>
2 #include <math.h>
3 #include <stdint.h>
4
5 #if FLT_EVAL_METHOD==0
6 #define EPS FLT_EPSILON
7 #elif FLT_EVAL_METHOD==1
8 #define EPS DBL_EPSILON
9 #elif FLT_EVAL_METHOD==2
10 #define EPS LDBL_EPSILON
11 #endif
12 static const float_t toint = 1/EPS;
13
14 float rintf(float x)
15 {
16         union {float f; uint32_t i;} u = {x};
17         int e = u.i>>23 & 0xff;
18         int s = u.i>>31;
19         float_t y;
20
21         if (e >= 0x7f+23)
22                 return x;
23         if (s)
24                 y = x - toint + toint;
25         else
26                 y = x + toint - toint;
27         if (y == 0)
28                 return s ? -0.0f : 0.0f;
29         return y;
30 }