PostGIS  2.3.8dev-r@@SVN_REVISION@@

◆ nextafterf_custom()

static float nextafterf_custom ( float  x,
float  y 
)
static

Definition at line 89 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().

90 {
91  int hx,hy,ix,iy;
92 
93  GET_FLOAT_WORD(hx,x);
94  GET_FLOAT_WORD(hy,y);
95  ix = hx&0x7fffffff; /* |x| */
96  iy = hy&0x7fffffff; /* |y| */
97 
98  if ((ix>0x7f800000) || /* x is nan */
99  (iy>0x7f800000)) /* y is nan */
100  return x+y;
101  if (x==y) return y; /* x=y, return y */
102  if (ix==0)
103  {
104  /* x == 0 */
105  SET_FLOAT_WORD(x,(hy&0x80000000)|1);/* return +-minsubnormal */
106  y = x*x;
107  if (y==x) return y;
108  else return x; /* raise underflow flag */
109  }
110  if (hx>=0)
111  {
112  /* x > 0 */
113  if (hx>hy)
114  {
115  /* x > y, x -= ulp */
116  hx -= 1;
117  }
118  else
119  {
120  /* x < y, x += ulp */
121  hx += 1;
122  }
123  }
124  else
125  {
126  /* x < 0 */
127  if (hy>=0||hx>hy)
128  {
129  /* x < y, x -= ulp */
130  hx -= 1;
131  }
132  else
133  {
134  /* x > y, x += ulp */
135  hx += 1;
136  }
137  }
138  hy = hx&0x7f800000;
139  if (hy>=0x7f800000) return x+x; /* overflow */
140  if (hy<0x00800000)
141  {
142  /* underflow */
143  y = x*x;
144  if (y!=x)
145  {
146  /* raise underflow flag */
147  SET_FLOAT_WORD(y,hx);
148  return y;
149  }
150  }
151  SET_FLOAT_WORD(x,hx);
152  return x;
153 }
#define SET_FLOAT_WORD(d, i)
Definition: lwgeom_api.c:76
#define GET_FLOAT_WORD(i, d)
Definition: lwgeom_api.c:68
Here is the caller graph for this function: