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

Go to the source code of this file.

Functions

double attribute_hidden __ieee754_atan2 (double y, double x)
 

Variables

static const double tiny = 1.0e-300
 
static const double zero = 0.0
 
static const double pi_o_4 = 7.8539816339744827900E-01
 
static const double pi_o_2 = 1.5707963267948965580E+00
 
static const double pi = 3.1415926535897931160E+00
 
static const double pi_lo = 1.2246467991473531772E-16
 

Function Documentation

◆ __ieee754_atan2()

double attribute_hidden __ieee754_atan2 ( double  y,
double  x 
)

Definition at line 50 of file e_atan2.c.

References __ieee754_atan2(), atan(), EXTRACT_WORDS, fabs(), GET_HIGH_WORD, k, libm_hidden_def(), pi, pi_lo, pi_o_2, pi_o_4, SET_HIGH_WORD, strong_alias, tiny, and zero.

Referenced by __ieee754_atan2().

51 {
52  double z;
53  int32_t k,m,hx,hy,ix,iy;
54  u_int32_t lx,ly;
55 
56  EXTRACT_WORDS(hx,lx,x);
57  ix = hx&0x7fffffff;
58  EXTRACT_WORDS(hy,ly,y);
59  iy = hy&0x7fffffff;
60  if(((ix|((lx|-(int32_t)lx)>>31))>0x7ff00000)||
61  ((iy|((ly|-(int32_t)ly)>>31))>0x7ff00000)) /* x or y is NaN */
62  return x+y;
63  if(((hx-0x3ff00000)|lx)==0) return atan(y); /* x=1.0 */
64  m = ((hy>>31)&1)|((hx>>30)&2); /* 2*sign(x)+sign(y) */
65 
66  /* when y = 0 */
67  if((iy|ly)==0) {
68  switch(m) {
69  case 0:
70  case 1: return y; /* atan(+-0,+anything)=+-0 */
71  case 2: return pi+tiny;/* atan(+0,-anything) = pi */
72  case 3: return -pi-tiny;/* atan(-0,-anything) =-pi */
73  }
74  }
75  /* when x = 0 */
76  if((ix|lx)==0) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny;
77 
78  /* when x is INF */
79  if(ix==0x7ff00000) {
80  if(iy==0x7ff00000) {
81  switch(m) {
82  case 0: return pi_o_4+tiny;/* atan(+INF,+INF) */
83  case 1: return -pi_o_4-tiny;/* atan(-INF,+INF) */
84  case 2: return 3.0*pi_o_4+tiny;/*atan(+INF,-INF)*/
85  case 3: return -3.0*pi_o_4-tiny;/*atan(-INF,-INF)*/
86  }
87  } else {
88  switch(m) {
89  case 0: return zero ; /* atan(+...,+INF) */
90  case 1: return -zero ; /* atan(-...,+INF) */
91  case 2: return pi+tiny ; /* atan(+...,-INF) */
92  case 3: return -pi-tiny ; /* atan(-...,-INF) */
93  }
94  }
95  }
96  /* when y is INF */
97  if(iy==0x7ff00000) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny;
98 
99  /* compute y/x */
100  k = (iy-ix)>>20;
101  if(k > 60) z=pi_o_2+0.5*pi_lo; /* |y/x| > 2**60 */
102  else if(hx<0&&k<-60) z=0.0; /* |y|/x < -2**60 */
103  else z=atan(fabs(y/x)); /* safe to do y/x */
104  switch (m) {
105  case 0: return z ; /* atan(+,+) */
106  case 1: {
107  u_int32_t zh;
108  GET_HIGH_WORD(zh,z);
109  SET_HIGH_WORD(z,zh ^ 0x80000000);
110  }
111  return z ; /* atan(-,+) */
112  case 2: return pi-(z-pi_lo);/* atan(+,-) */
113  default: /* case 3 */
114  return (z-pi_lo)-pi;/* atan(-,-) */
115  }
116 }
#define GET_HIGH_WORD(i, d)
Definition: math_private.h:108
static const double pi
Definition: e_atan2.c:47
GLdouble GLdouble z
static const double tiny
Definition: e_atan2.c:43
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1574
signed int int32_t
const GLfloat * m
static const double pi_o_4
Definition: e_atan2.c:45
#define SET_HIGH_WORD(d, v)
Definition: math_private.h:136
static const double pi_lo
Definition: e_atan2.c:48
static const double zero
Definition: e_atan2.c:44
unsigned int u_int32_t
Definition: math_private.h:31
#define EXTRACT_WORDS(ix0, ix1, d)
Definition: math_private.h:98
static const double pi_o_2
Definition: e_atan2.c:46
GLint GLint GLint GLint GLint GLint y
Definition: SDL_opengl.h:1574
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
double atan(double x)
Definition: s_atan.c:67
double fabs(double x)
Definition: s_fabs.c:22

Variable Documentation

◆ pi

const double pi = 3.1415926535897931160E+00
static

Definition at line 47 of file e_atan2.c.

Referenced by __ieee754_atan2().

◆ pi_lo

const double pi_lo = 1.2246467991473531772E-16
static

Definition at line 48 of file e_atan2.c.

Referenced by __ieee754_atan2().

◆ pi_o_2

const double pi_o_2 = 1.5707963267948965580E+00
static

Definition at line 46 of file e_atan2.c.

Referenced by __ieee754_atan2().

◆ pi_o_4

const double pi_o_4 = 7.8539816339744827900E-01
static

Definition at line 45 of file e_atan2.c.

Referenced by __ieee754_atan2().

◆ tiny

const double tiny = 1.0e-300
static

Definition at line 43 of file e_atan2.c.

Referenced by __ieee754_atan2().

◆ zero

const double zero = 0.0
static

Definition at line 44 of file e_atan2.c.

Referenced by __ieee754_atan2(), and SDL_Convert_F32_to_S32_Scalar().