PostGIS  2.1.10dev-r@@SVN_REVISION@@
static float nextafterf_custom ( float  x,
float  y 
)
static

Definition at line 62 of file lwgeom_api.c.

References GET_FLOAT_WORD, SET_FLOAT_WORD, pixval::x, and pixval::y.

Referenced by next_double_down(), next_double_up(), next_float_down(), and next_float_up().

63 {
64  int hx,hy,ix,iy;
65 
66  GET_FLOAT_WORD(hx,x);
67  GET_FLOAT_WORD(hy,y);
68  ix = hx&0x7fffffff; /* |x| */
69  iy = hy&0x7fffffff; /* |y| */
70 
71  if ((ix>0x7f800000) || /* x is nan */
72  (iy>0x7f800000)) /* y is nan */
73  return x+y;
74  if (x==y) return y; /* x=y, return y */
75  if (ix==0)
76  {
77  /* x == 0 */
78  SET_FLOAT_WORD(x,(hy&0x80000000)|1);/* return +-minsubnormal */
79  y = x*x;
80  if (y==x) return y;
81  else return x; /* raise underflow flag */
82  }
83  if (hx>=0)
84  {
85  /* x > 0 */
86  if (hx>hy)
87  {
88  /* x > y, x -= ulp */
89  hx -= 1;
90  }
91  else
92  {
93  /* x < y, x += ulp */
94  hx += 1;
95  }
96  }
97  else
98  {
99  /* x < 0 */
100  if (hy>=0||hx>hy)
101  {
102  /* x < y, x -= ulp */
103  hx -= 1;
104  }
105  else
106  {
107  /* x > y, x += ulp */
108  hx += 1;
109  }
110  }
111  hy = hx&0x7f800000;
112  if (hy>=0x7f800000) return x+x; /* overflow */
113  if (hy<0x00800000)
114  {
115  /* underflow */
116  y = x*x;
117  if (y!=x)
118  {
119  /* raise underflow flag */
120  SET_FLOAT_WORD(y,hx);
121  return y;
122  }
123  }
124  SET_FLOAT_WORD(x,hx);
125  return x;
126 }
tuple x
Definition: pixval.py:53
#define SET_FLOAT_WORD(d, i)
Definition: lwgeom_api.c:49
tuple y
Definition: pixval.py:54
#define GET_FLOAT_WORD(i, d)
Definition: lwgeom_api.c:41

Here is the caller graph for this function: