34#define T __pow_log_data.tab
35#define A __pow_log_data.poly
36#define Ln2hi __pow_log_data.ln2hi
37#define Ln2lo __pow_log_data.ln2lo
38#define N (1 << POW_LOG_TABLE_BITS)
39#define OFF 0x3fe6955500000000
53 double_t z,
r,
y, invc, logc, logctail, kd, hi, t1, t2, lo, lo1, lo2,
p;
63 iz = ix - (tmp & 0xfffULL << 52);
70 logctail =
T[
i].logctail;
75 r = __builtin_fma(
z, invc, -1.0);
86 t1 = kd *
Ln2hi + logc;
88 lo1 = kd *
Ln2lo + logctail;
99 lo3 = __builtin_fma(ar,
r, -ar2);
105 lo3 = rlo * (ar + arhi);
106 lo4 = t2 - hi + arhi2;
109 p = (ar3 * (
A[1] +
r *
A[2] +
110 ar2 * (
A[3] +
r *
A[4] + ar2 * (
A[5] +
r *
A[6]))));
111 lo = lo1 + lo2 + lo3 + lo4 +
p;
119#define N (1 << EXP_TABLE_BITS)
120#define InvLn2N __exp_data.invln2N
121#define NegLn2hiN __exp_data.negln2hiN
122#define NegLn2loN __exp_data.negln2loN
123#define Shift __exp_data.shift
124#define T __exp_data.tab
125#define C2 __exp_data.poly[5 - EXP_POLY_ORDER]
126#define C3 __exp_data.poly[6 - EXP_POLY_ORDER]
127#define C4 __exp_data.poly[7 - EXP_POLY_ORDER]
128#define C5 __exp_data.poly[8 - EXP_POLY_ORDER]
129#define C6 __exp_data.poly[9 - EXP_POLY_ORDER]
142 if ((ki & 0x80000000) == 0) {
144 sbits -= 1009ull << 52;
150 sbits += 1022ull << 52;
164 lo =
one - hi +
y + lo;
168 y =
asdouble(sbits & 0x8000000000000000);
176#define SIGN_BIAS (0x800 << EXP_TABLE_BITS)
187 abstop =
top12(
x) & 0x7ff;
190 if (abstop -
top12(0x1p-54) >= 0x80000000) {
194 return sign_bias ? -
one :
one;
196 if (abstop >=
top12(1024.0)) {
212 ki = converttoint(
z);
213#elif EXP_USE_TOINT_NARROW
251 int e =
iy >> 52 & 0x7ff;
256 if (
iy & ((1ULL << (0x3ff + 52 -
e)) - 1))
258 if (
iy & (1ULL << (0x3ff + 52 -
e)))
280 (topy & 0x7ff) - 0x3be >= 0x43e - 0x3be)) {
295 if ((2 * ix < 2 *
asuint64(1.0)) == !(
iy >> 63))
315 ix &= 0x7fffffffffffffff;
318 if ((topy & 0x7ff) - 0x3be >= 0x43e - 0x3be) {
322 if ((topy & 0x7ff) < 0x3be) {
330 return (ix >
asuint64(1.0)) == (topy < 0x800) ?
337 ix &= 0x7fffffffffffffff;
347 elo =
y * lo + __builtin_fma(
y, hi, -ehi);
354 elo = ylo * lhi +
y * llo;
double __math_invalid(double x)
double __math_oflow(uint32_t sign)
double __math_uflow(uint32_t sign)
struct outqueuenode * tail
_ACRTIMP double __cdecl fabs(double)
static const uint32_t k[]
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLdouble GLdouble GLdouble r
GLenum GLenum GLenum GLenum GLenum scale
GLdouble GLdouble GLdouble GLdouble top
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define issignaling_inline(x)
static double asdouble(uint64_t i)
static uint64_t asuint64(double f)
static double eval_as_double(double x)
static void fp_force_eval(double x)
static double fp_barrier(double x)
static double_t log_inline(uint64_t ix, double_t *tail)
static double specialcase(double_t tmp, uint64_t sbits, uint64_t ki)
static int zeroinfnan(uint64_t i)
static double exp_inline(double_t x, double_t xtail, uint32_t sign_bias)
double pow(double x, double y)
static int checkint(uint64_t iy)
static uint32_t top12(double x)
#define POW_LOG_TABLE_BITS
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2