source:
EcnlProtoTool/trunk/musl-1.1.18/src/math/ilogb.c@
444
Last change on this file since 444 was 444, checked in by , 4 years ago | |
---|---|
|
|
File size: 445 bytes |
Rev | Line | |
---|---|---|
[444] | 1 | #include <limits.h> |
2 | #include "libm.h" | |
3 | ||
4 | int ilogb(double x) | |
5 | { | |
6 | #pragma STDC FENV_ACCESS ON | |
7 | union {double f; uint64_t i;} u = {x}; | |
8 | uint64_t i = u.i; | |
9 | int e = i>>52 & 0x7ff; | |
10 | ||
11 | if (!e) { | |
12 | i <<= 12; | |
13 | if (i == 0) { | |
14 | FORCE_EVAL(0/0.0f); | |
15 | return FP_ILOGB0; | |
16 | } | |
17 | /* subnormal x */ | |
18 | for (e = -0x3ff; i>>63 == 0; e--, i<<=1); | |
19 | return e; | |
20 | } | |
21 | if (e == 0x7ff) { | |
22 | FORCE_EVAL(0/0.0f); | |
23 | return i<<12 ? FP_ILOGBNAN : INT_MAX; | |
24 | } | |
25 | return e - 0x3ff; | |
26 | } |
Note:
See TracBrowser
for help on using the repository browser.