ld80/s_expl.c:
* Use integral numerical constants, and let the compiler do the conversion to long double. ld128/s_expl.c: * Use integral numerical constants, and let the compiler do the conversion to long double. * Use the ENTERI/RETURNI macros, which are no-ops on ld128. This however makes the ld80 and ld128 identical. Reviewed by: bde (as part of larger diff)
This commit is contained in:
parent
35cbca6a7f
commit
8cc74771f2
@ -228,7 +228,7 @@ expl(long double x)
|
||||
double dr, fn, r2;
|
||||
|
||||
int k, n, n2;
|
||||
uint32_t hx, ix;
|
||||
uint16_t hx, ix;
|
||||
|
||||
/* Filter out exceptional cases. */
|
||||
u.e = x;
|
||||
@ -248,6 +248,8 @@ expl(long double x)
|
||||
return (1 + x); /* 1 with inexact iff x != 0 */
|
||||
}
|
||||
|
||||
ENTERI();
|
||||
|
||||
/* Reduce x to (k*ln2 + endpoint[n2] + r1 + r2). */
|
||||
/* Use a specialized rint() to get fn. Assume round-to-nearest. */
|
||||
/* XXX assume no extra precision for the additions, as for trig fns. */
|
||||
@ -262,10 +264,11 @@ expl(long double x)
|
||||
k = n >> LOG2_INTERVALS;
|
||||
r1 = x - fn * L1;
|
||||
r2 = fn * -L2;
|
||||
r = r1 + r2;
|
||||
|
||||
/* Prepare scale factors. */
|
||||
v.xbits.manh = 0;
|
||||
v.xbits.manl = 0;
|
||||
/* XXX sparc64 multiplication is so slow that scalbnl() is faster. */
|
||||
v.e = 1;
|
||||
if (k >= LDBL_MIN_EXP) {
|
||||
v.xbits.expsign = BIAS + k;
|
||||
twopk = v.e;
|
||||
@ -284,9 +287,9 @@ expl(long double x)
|
||||
/* Scale by 2**k. */
|
||||
if (k >= LDBL_MIN_EXP) {
|
||||
if (k == LDBL_MAX_EXP)
|
||||
return (t * 2.0L * 0x1p16383L);
|
||||
return (t * twopk);
|
||||
RETURNI(t * 2 * 0x1p16383L);
|
||||
RETURNI(t * twopk);
|
||||
} else {
|
||||
return (t * twopkp10000 * twom10000);
|
||||
RETURNI(t * twopkp10000 * twom10000);
|
||||
}
|
||||
}
|
||||
|
@ -278,7 +278,7 @@ expl(long double x)
|
||||
r2 = fn * -L2;
|
||||
|
||||
/* Prepare scale factors. */
|
||||
v.e = 1ULL << 63;
|
||||
v.e = 1;
|
||||
if (k >= LDBL_MIN_EXP) {
|
||||
v.xbits.expsign = BIAS + k;
|
||||
twopk = v.e;
|
||||
@ -296,7 +296,7 @@ expl(long double x)
|
||||
/* Scale by 2**k. */
|
||||
if (k >= LDBL_MIN_EXP) {
|
||||
if (k == LDBL_MAX_EXP)
|
||||
RETURNI(t * 2.0L * 0x1p16383L);
|
||||
RETURNI(t * 2 * 0x1p16383L);
|
||||
RETURNI(t * twopk);
|
||||
} else {
|
||||
RETURNI(t * twopkp10000 * twom10000);
|
||||
|
Loading…
Reference in New Issue
Block a user