7 static const double p10
[] = {
8 1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10,
9 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1,
10 1, 1e1
, 1e2
, 1e3
, 1e4
, 1e5
, 1e6
, 1e7
, 1e8
, 1e9
,
11 1e10
, 1e11
, 1e12
, 1e13
, 1e14
, 1e15
13 double n
, y
= modf(x
, &n
);
14 union {double f
; uint64_t i
;} u
= {n
};
15 /* fabs(n) < 16 without raising invalid on nan */
16 if ((u
.i
>>52 & 0x7ff) < 0x3ff+4) {
17 if (!y
) return p10
[(int)n
+15];
18 y
= exp2(3.32192809488736234787031942948939 * y
);
19 return y
* p10
[(int)n
+15];
24 weak_alias(exp10
, pow10
);