Introduce the macro LOG2_INTERVAL, which is log2(number of intervals).
Use the macroi as a micro-optimization to convert a subtraction and division to a shift. Obtained from: bde
This commit is contained in:
parent
24150d37d3
commit
4aa8c9453f
@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include "math_private.h"
|
||||
|
||||
#define INTERVALS 128
|
||||
#define LOG2_INTERVALS 7
|
||||
#define BIAS (LDBL_MAX_EXP - 1)
|
||||
|
||||
static volatile const long double tiny = 0x1p-10000L;
|
||||
@ -229,7 +230,7 @@ expl(long double x)
|
||||
fn = x * INV_L + 0x1.8p112 - 0x1.8p112;
|
||||
n = (int)fn;
|
||||
n2 = (unsigned)n % INTERVALS;
|
||||
k = (n - n2) / INTERVALS;
|
||||
k = n >> LOG2_INTERVALS;
|
||||
r1 = x - fn * L1;
|
||||
r2 = -fn * L2;
|
||||
|
||||
|
@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include "math_private.h"
|
||||
|
||||
#define INTERVALS 128
|
||||
#define LOG2_INTERVALS 7
|
||||
#define BIAS (LDBL_MAX_EXP - 1)
|
||||
|
||||
static const long double
|
||||
@ -269,7 +270,8 @@ expl(long double x)
|
||||
n = (int)fn;
|
||||
#endif
|
||||
n2 = (unsigned)n % INTERVALS;
|
||||
k = (n - n2) / INTERVALS;
|
||||
/* Depend on the sign bit being propagated: */
|
||||
k = n >> LOG2_INTERVALS;
|
||||
r1 = x - fn * L1;
|
||||
r2 = -fn * L2;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user