SDL  2.0
e_log.c File Reference
#include "math_libm.h"
#include "math_private.h"
+ Include dependency graph for e_log.c:

Go to the source code of this file.

Functions

double attribute_hidden __ieee754_log (double x)
 

Variables

static double ln2_hi = 6.93147180369123816490e-01
 
static double ln2_lo = 1.90821492927058770002e-10
 
static double two54 = 1.80143985094819840000e+16
 
static double Lg1 = 6.666666666666735130e-01
 
static double Lg2 = 3.999999999940941908e-01
 
static double Lg3 = 2.857142874366239149e-01
 
static double Lg4 = 2.222219843214978396e-01
 
static double Lg5 = 1.818357216161805012e-01
 
static double Lg6 = 1.531383769920937332e-01
 
static double Lg7 = 1.479819860511658591e-01
 
static double zero = 0.0
 

Function Documentation

◆ __ieee754_log()

double attribute_hidden __ieee754_log ( double  x)

Definition at line 99 of file e_log.c.

References EXTRACT_WORDS, GET_HIGH_WORD, i, j, k, Lg1, Lg2, Lg3, Lg4, Lg5, Lg6, Lg7, ln2_hi, ln2_lo, SET_HIGH_WORD, two54, and zero.

102 {
103  double hfsq, f, s, z, R, w, t1, t2, dk;
104  int32_t k, hx, i, j;
105  u_int32_t lx;
106 
107  EXTRACT_WORDS(hx, lx, x);
108 
109  k = 0;
110  if (hx < 0x00100000) { /* x < 2**-1022 */
111  if (((hx & 0x7fffffff) | lx) == 0)
112  return -two54 / zero; /* log(+-0)=-inf */
113  if (hx < 0)
114  return (x - x) / zero; /* log(-#) = NaN */
115  k -= 54;
116  x *= two54; /* subnormal number, scale up x */
117  GET_HIGH_WORD(hx, x);
118  }
119  if (hx >= 0x7ff00000)
120  return x + x;
121  k += (hx >> 20) - 1023;
122  hx &= 0x000fffff;
123  i = (hx + 0x95f64) & 0x100000;
124  SET_HIGH_WORD(x, hx | (i ^ 0x3ff00000)); /* normalize x or x/2 */
125  k += (i >> 20);
126  f = x - 1.0;
127  if ((0x000fffff & (2 + hx)) < 3) { /* |f| < 2**-20 */
128  if (f == zero) {
129  if (k == 0)
130  return zero;
131  else {
132  dk = (double) k;
133  return dk * ln2_hi + dk * ln2_lo;
134  }
135  }
136  R = f * f * (0.5 - 0.33333333333333333 * f);
137  if (k == 0)
138  return f - R;
139  else {
140  dk = (double) k;
141  return dk * ln2_hi - ((R - dk * ln2_lo) - f);
142  }
143  }
144  s = f / (2.0 + f);
145  dk = (double) k;
146  z = s * s;
147  i = hx - 0x6147a;
148  w = z * z;
149  j = 0x6b851 - hx;
150  t1 = w * (Lg2 + w * (Lg4 + w * Lg6));
151  t2 = z * (Lg1 + w * (Lg3 + w * (Lg5 + w * Lg7)));
152  i |= j;
153  R = t2 + t1;
154  if (i > 0) {
155  hfsq = 0.5 * f * f;
156  if (k == 0)
157  return f - (hfsq - s * (hfsq + R));
158  else
159  return dk * ln2_hi - ((hfsq - (s * (hfsq + R) + dk * ln2_lo)) -
160  f);
161  } else {
162  if (k == 0)
163  return f - s * (f - R);
164  else
165  return dk * ln2_hi - ((s * (f - R) - dk * ln2_lo) - f);
166  }
167 }
#define GET_HIGH_WORD(i, d)
Definition: math_private.h:103
static double zero
Definition: e_log.c:91
GLdouble s
Definition: SDL_opengl.h:2056
signed int int32_t
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1567
static double Lg1
Definition: e_log.c:80
static double ln2_lo
Definition: e_log.c:78
GLfloat f
static double Lg6
Definition: e_log.c:85
#define SET_HIGH_WORD(d, v)
Definition: math_private.h:131
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t1
unsigned int u_int32_t
Definition: math_private.h:29
#define EXTRACT_WORDS(ix0, ix1, d)
Definition: math_private.h:93
static double Lg5
Definition: e_log.c:84
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int int in j)
Definition: SDL_x11sym.h:50
static double Lg4
Definition: e_log.c:83
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
GLdouble GLdouble z
static double Lg3
Definition: e_log.c:82
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int int int return Display Window Cursor return Display Window return Display Drawable GC int int unsigned int unsigned int return Display Drawable GC int int _Xconst char int return Display Drawable GC int int unsigned int unsigned int return Display return Display Cursor return Display GC return XModifierKeymap return char Display Window int return Display return Display Atom return Display Window XWindowAttributes return Display Window return Display XEvent Bool(*) XPointer return Display Window Bool unsigned int int int Window Cursor Time return Display Window int return KeySym return Display _Xconst char Bool return Display _Xconst char return XKeyEvent char int KeySym XComposeStatus return Display int int int XVisualInfo return Display Window int int return _Xconst char return Display XEvent return Display Drawable GC XImage int int int int unsigned int unsigned int return Display Window Window Window int int int int unsigned int return Display Window Window int int return Display Window unsigned int unsigned int return Display Window Bool long XEvent return Display GC unsigned long return Display Window int Time return Display Window Window return Display Window unsigned long return Display Window XSizeHints Display Colormap XColor int return char int XTextProperty return XFontStruct _Xconst char int int int int XCharStruct return Display Window return Display Time return Display Colormap return Display Window Window int int unsigned int unsigned int int int return Display Window int return XExtensionInfo Display char XExtensionHooks int XPointer return XExtensionInfo XExtensionInfo Display return Display return Display unsigned long Display GC Display char long Display xReply int Bool return Display Bool return Display int SDL_X11_XESetEventToWireRetType return Display Window Window Window Window unsigned int return Display XShmSegmentInfo return Display Drawable GC XImage int int int int unsigned int unsigned int Boo k)
Definition: SDL_x11sym.h:211
static double Lg7
Definition: e_log.c:86
static double two54
Definition: e_log.c:79
GLubyte GLubyte GLubyte GLubyte w
static double Lg2
Definition: e_log.c:81
static double ln2_hi
Definition: e_log.c:77

Variable Documentation

◆ Lg1

double Lg1 = 6.666666666666735130e-01
static

Definition at line 80 of file e_log.c.

Referenced by __ieee754_log().

◆ Lg2

double Lg2 = 3.999999999940941908e-01
static

Definition at line 81 of file e_log.c.

Referenced by __ieee754_log().

◆ Lg3

double Lg3 = 2.857142874366239149e-01
static

Definition at line 82 of file e_log.c.

Referenced by __ieee754_log().

◆ Lg4

double Lg4 = 2.222219843214978396e-01
static

Definition at line 83 of file e_log.c.

Referenced by __ieee754_log().

◆ Lg5

double Lg5 = 1.818357216161805012e-01
static

Definition at line 84 of file e_log.c.

Referenced by __ieee754_log().

◆ Lg6

double Lg6 = 1.531383769920937332e-01
static

Definition at line 85 of file e_log.c.

Referenced by __ieee754_log().

◆ Lg7

double Lg7 = 1.479819860511658591e-01
static

Definition at line 86 of file e_log.c.

Referenced by __ieee754_log().

◆ ln2_hi

double ln2_hi = 6.93147180369123816490e-01
static

Definition at line 77 of file e_log.c.

Referenced by __ieee754_log().

◆ ln2_lo

double ln2_lo = 1.90821492927058770002e-10
static

Definition at line 78 of file e_log.c.

Referenced by __ieee754_log().

◆ two54

double two54 = 1.80143985094819840000e+16
static

Definition at line 79 of file e_log.c.

Referenced by __ieee754_log(), and libm_hidden_proto().

◆ zero

double zero = 0.0
static

Definition at line 91 of file e_log.c.

Referenced by __ieee754_log().