blob: 869e962d2eddc9d991057b5204dc2aae7b989437 [file] [log] [blame]
Viet-Trung Luu96b05c12016-01-11 11:26:36 -08001#include "libm.h"
2
3#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
George Kulakowski17e3b042016-02-18 15:59:50 -08004long double frexpl(long double x, int* e) {
5 return frexp(x, e);
Viet-Trung Luu96b05c12016-01-11 11:26:36 -08006}
7#elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
George Kulakowski17e3b042016-02-18 15:59:50 -08008long double frexpl(long double x, int* e) {
9 union ldshape u = {x};
10 int ee = u.i.se & 0x7fff;
Viet-Trung Luu96b05c12016-01-11 11:26:36 -080011
George Kulakowski17e3b042016-02-18 15:59:50 -080012 if (!ee) {
13 if (x) {
14 x = frexpl(x * 0x1p120, e);
15 *e -= 120;
16 } else
17 *e = 0;
18 return x;
19 } else if (ee == 0x7fff) {
20 return x;
21 }
Viet-Trung Luu96b05c12016-01-11 11:26:36 -080022
George Kulakowski17e3b042016-02-18 15:59:50 -080023 *e = ee - 0x3ffe;
24 u.i.se &= 0x8000;
25 u.i.se |= 0x3ffe;
26 return u.f;
Viet-Trung Luu96b05c12016-01-11 11:26:36 -080027}
28#endif