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 const double ln2_hi = 6.93147180369123816490e-01
 
static const double ln2_lo = 1.90821492927058770002e-10
 
static const double two54 = 1.80143985094819840000e+16
 
static const double Lg1 = 6.666666666666735130e-01
 
static const double Lg2 = 3.999999999940941908e-01
 
static const double Lg3 = 2.857142874366239149e-01
 
static const double Lg4 = 2.222219843214978396e-01
 
static const double Lg5 = 1.818357216161805012e-01
 
static const double Lg6 = 1.531383769920937332e-01
 
static const double Lg7 = 1.479819860511658591e-01
 
static const double zero = 0.0
 

Function Documentation

◆ __ieee754_log()

double attribute_hidden __ieee754_log ( double  x)

Definition at line 85 of file e_log.c.

86 {
87  double hfsq,f,s,z,R,w,t1,t2,dk;
88  int32_t k,hx,i,j;
89  u_int32_t lx;
90 
91  EXTRACT_WORDS(hx,lx,x);
92 
93  k=0;
94  if (hx < 0x00100000) { /* x < 2**-1022 */
95  if (((hx&0x7fffffff)|lx)==0)
96  return -two54/zero; /* log(+-0)=-inf */
97  if (hx<0) return (x-x)/zero; /* log(-#) = NaN */
98  k -= 54; x *= two54; /* subnormal number, scale up x */
99  GET_HIGH_WORD(hx,x);
100  }
101  if (hx >= 0x7ff00000) return x+x;
102  k += (hx>>20)-1023;
103  hx &= 0x000fffff;
104  i = (hx+0x95f64)&0x100000;
105  SET_HIGH_WORD(x,hx|(i^0x3ff00000)); /* normalize x or x/2 */
106  k += (i>>20);
107  f = x-1.0;
108  if((0x000fffff&(2+hx))<3) { /* |f| < 2**-20 */
109  if(f==zero) {if(k==0) return zero; else {dk=(double)k;
110  return dk*ln2_hi+dk*ln2_lo;}
111  }
112  R = f*f*(0.5-0.33333333333333333*f);
113  if(k==0) return f-R; else {dk=(double)k;
114  return dk*ln2_hi-((R-dk*ln2_lo)-f);}
115  }
116  s = f/(2.0+f);
117  dk = (double)k;
118  z = s*s;
119  i = hx-0x6147a;
120  w = z*z;
121  j = 0x6b851-hx;
122  t1= w*(Lg2+w*(Lg4+w*Lg6));
123  t2= z*(Lg1+w*(Lg3+w*(Lg5+w*Lg7)));
124  i |= j;
125  R = t2+t1;
126  if(i>0) {
127  hfsq=0.5*f*f;
128  if(k==0) return f-(hfsq-s*(hfsq+R)); else
129  return dk*ln2_hi-((hfsq-(s*(hfsq+R)+dk*ln2_lo))-f);
130  } else {
131  if(k==0) return f-s*(f-R); else
132  return dk*ln2_hi-((s*(f-R)-dk*ln2_lo)-f);
133  }
134 }

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.

Variable Documentation

◆ Lg1

const double Lg1 = 6.666666666666735130e-01
static

Definition at line 75 of file e_log.c.

Referenced by __ieee754_log().

◆ Lg2

const double Lg2 = 3.999999999940941908e-01
static

Definition at line 76 of file e_log.c.

Referenced by __ieee754_log().

◆ Lg3

const double Lg3 = 2.857142874366239149e-01
static

Definition at line 77 of file e_log.c.

Referenced by __ieee754_log().

◆ Lg4

const double Lg4 = 2.222219843214978396e-01
static

Definition at line 78 of file e_log.c.

Referenced by __ieee754_log().

◆ Lg5

const double Lg5 = 1.818357216161805012e-01
static

Definition at line 79 of file e_log.c.

Referenced by __ieee754_log().

◆ Lg6

const double Lg6 = 1.531383769920937332e-01
static

Definition at line 80 of file e_log.c.

Referenced by __ieee754_log().

◆ Lg7

const double Lg7 = 1.479819860511658591e-01
static

Definition at line 81 of file e_log.c.

Referenced by __ieee754_log().

◆ ln2_hi

const double ln2_hi = 6.93147180369123816490e-01
static

Definition at line 72 of file e_log.c.

Referenced by __ieee754_log().

◆ ln2_lo

const double ln2_lo = 1.90821492927058770002e-10
static

Definition at line 73 of file e_log.c.

Referenced by __ieee754_log().

◆ two54

const double two54 = 1.80143985094819840000e+16
static

Definition at line 74 of file e_log.c.

Referenced by __ieee754_log().

◆ zero

const double zero = 0.0
static

Definition at line 83 of file e_log.c.

Referenced by __ieee754_log().

t1
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t1
Definition: SDL_opengl_glext.h:8583
Lg1
static const double Lg1
Definition: e_log.c:75
z
GLdouble GLdouble z
Definition: SDL_opengl_glext.h:404
Lg7
static const double Lg7
Definition: e_log.c:81
EXTRACT_WORDS
#define EXTRACT_WORDS(ix0, ix1, d)
Definition: math_private.h:99
Lg2
static const double Lg2
Definition: e_log.c:76
SET_HIGH_WORD
#define SET_HIGH_WORD(d, v)
Definition: math_private.h:137
zero
static const double zero
Definition: e_log.c:83
x
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1573
int32_t
signed int int32_t
Definition: SDL_config_windows.h:62
u_int32_t
unsigned int u_int32_t
Definition: math_private.h:31
f
GLfloat f
Definition: SDL_opengl_glext.h:1870
Lg5
static const double Lg5
Definition: e_log.c:79
k
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:213
ln2_lo
static const double ln2_lo
Definition: e_log.c:73
s
GLdouble s
Definition: SDL_opengl.h:2062
j
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
Lg6
static const double Lg6
Definition: e_log.c:80
two54
static const double two54
Definition: e_log.c:74
GET_HIGH_WORD
#define GET_HIGH_WORD(i, d)
Definition: math_private.h:109
Lg4
static const double Lg4
Definition: e_log.c:78
ln2_hi
static const double ln2_hi
Definition: e_log.c:72
i
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
Lg3
static const double Lg3
Definition: e_log.c:77
w
GLubyte GLubyte GLubyte GLubyte w
Definition: SDL_opengl_glext.h:731