Revert "Added SDL_nextafter() and SDL_nextafterf()"
This reverts commit bc5d074818.
It's not clear that we need these yet, so I'm going to remove them for now.
This commit is contained in:
1 parent
0c16f4faf0
commit
2e465ae31b
20 files changed
+47
-319
No files matched your search
@@ -37,8 +37,6 @@ double SDL_uclibc_fmod(double x, double y);
|
||||
double SDL_uclibc_log(double x);
|
||||
double SDL_uclibc_log10(double x);
|
||||
double SDL_uclibc_modf(double x, double *y);
|
||||
double SDL_uclibc_nextafter(double from, double to);
|
||||
float SDL_uclibc_nextafterf(float from, float to);
|
||||
double SDL_uclibc_pow(double x, double y);
|
||||
double SDL_uclibc_scalbn(double x, int n);
|
||||
double SDL_uclibc_sin(double x);
|
||||
|
||||
@@ -41,8 +41,6 @@ typedef unsigned int u_int32_t;
|
||||
#define __ieee754_log SDL_uclibc_log
|
||||
#define __ieee754_log10 SDL_uclibc_log10
|
||||
#define modf SDL_uclibc_modf
|
||||
#define nextafter SDL_uclibc_nextafter
|
||||
#define nextafterf SDL_uclibc_nextafterf
|
||||
#define __ieee754_pow SDL_uclibc_pow
|
||||
#define scalbln SDL_uclibc_scalbln
|
||||
#define scalbn SDL_uclibc_scalbn
|
||||
@@ -227,7 +225,4 @@ __ieee754_sqrt(double)
|
||||
extern int32_t __kernel_rem_pio2(const double *, double *, int, int, const unsigned int,
|
||||
const int32_t *) attribute_hidden;
|
||||
|
||||
/* FIXME: We don't have a cross-platform implementation of this */
|
||||
#define math_force_eval(x) (void)x
|
||||
|
||||
#endif /* _MATH_PRIVATE_H_ */
|
||||
@@ -1,71 +0,0 @@
|
||||
#include "SDL_internal.h"
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/* IEEE functions
|
||||
* nextafter(x,y)
|
||||
* return the next machine floating-point number of x in the
|
||||
* direction toward y.
|
||||
* Special cases:
|
||||
*/
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
double nextafter(double x, double y)
|
||||
{
|
||||
int32_t hx,hy,ix,iy;
|
||||
u_int32_t lx,ly;
|
||||
|
||||
EXTRACT_WORDS(hx,lx,x);
|
||||
EXTRACT_WORDS(hy,ly,y);
|
||||
ix = hx&0x7fffffff; /* |x| */
|
||||
iy = hy&0x7fffffff; /* |y| */
|
||||
|
||||
if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || /* x is nan */
|
||||
((iy>=0x7ff00000)&&((iy-0x7ff00000)|ly)!=0)) /* y is nan */
|
||||
return x+y;
|
||||
if(x==y) return y; /* x=y, return y */
|
||||
if((ix|lx)==0) { /* x == 0 */
|
||||
INSERT_WORDS(x,hy&0x80000000,1); /* return +-minsubnormal */
|
||||
y = x*x;
|
||||
if(y==x) return y; else return x; /* raise underflow flag */
|
||||
}
|
||||
if(hx>=0) { /* x > 0 */
|
||||
if(hx>hy||((hx==hy)&&(lx>ly))) { /* x > y, x -= ulp */
|
||||
if(lx==0) hx -= 1;
|
||||
lx -= 1;
|
||||
} else { /* x < y, x += ulp */
|
||||
lx += 1;
|
||||
if(lx==0) hx += 1;
|
||||
}
|
||||
} else { /* x < 0 */
|
||||
if(hy>=0||hx>hy||((hx==hy)&&(lx>ly))){/* x < y, x -= ulp */
|
||||
if(lx==0) hx -= 1;
|
||||
lx -= 1;
|
||||
} else { /* x > y, x += ulp */
|
||||
lx += 1;
|
||||
if(lx==0) hx += 1;
|
||||
}
|
||||
}
|
||||
hy = hx&0x7ff00000;
|
||||
if(hy>=0x7ff00000) return x+x; /* overflow */
|
||||
if(hy<0x00100000) { /* underflow */
|
||||
y = x*x;
|
||||
if(y!=x) { /* raise underflow flag */
|
||||
INSERT_WORDS(y,hx,lx);
|
||||
return y;
|
||||
}
|
||||
}
|
||||
INSERT_WORDS(x,hx,lx);
|
||||
return x;
|
||||
}
|
||||
libm_hidden_def(nextafter)
|
||||
@@ -1,97 +0,0 @@
|
||||
#include "SDL_internal.h"
|
||||
/* s_nextafterf.c -- float version of s_nextafter.c.
|
||||
* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
|
||||
*/
|
||||
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
float nextafterf(float x, float y)
|
||||
{
|
||||
int32_t hx, hy, ix, iy;
|
||||
|
||||
GET_FLOAT_WORD(hx, x);
|
||||
GET_FLOAT_WORD(hy, y);
|
||||
ix = hx & 0x7fffffff; /* |x| */
|
||||
iy = hy & 0x7fffffff; /* |y| */
|
||||
|
||||
/* x is nan or y is nan? */
|
||||
if ((ix > 0x7f800000) || (iy > 0x7f800000))
|
||||
return x + y;
|
||||
|
||||
if (x == y)
|
||||
return y;
|
||||
|
||||
if (ix == 0) { /* x == 0? */
|
||||
/* glibc 2.4 does not seem to set underflow? */
|
||||
/* float u; */
|
||||
/* return +-minsubnormal */
|
||||
SET_FLOAT_WORD(x, (hy & 0x80000000) | 1);
|
||||
/* u = x * x; raise underflow flag */
|
||||
/* math_force_eval(u); */
|
||||
return x;
|
||||
}
|
||||
|
||||
if (hx >= 0) { /* x > 0 */
|
||||
if (hx > hy) { /* x > y: x -= ulp */
|
||||
hx -= 1;
|
||||
} else { /* x < y: x += ulp */
|
||||
hx += 1;
|
||||
}
|
||||
} else { /* x < 0 */
|
||||
if (hy >= 0 || hx > hy) { /* x < y: x -= ulp */
|
||||
hx -= 1;
|
||||
} else { /* x > y: x += ulp */
|
||||
hx += 1;
|
||||
}
|
||||
}
|
||||
hy = hx & 0x7f800000;
|
||||
if (hy >= 0x7f800000) {
|
||||
x = x + x; /* overflow */
|
||||
return x; /* overflow */
|
||||
}
|
||||
if (hy < 0x00800000) {
|
||||
float u = x * x; /* underflow */
|
||||
math_force_eval(u); /* raise underflow flag */
|
||||
}
|
||||
SET_FLOAT_WORD(x, hx);
|
||||
return x;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* "testprog N a b"
|
||||
* calculates a = nextafterf(a, b) and prints a as float
|
||||
* and as raw bytes; repeats it N times.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int cnt, i;
|
||||
float a, b;
|
||||
cnt = atoi(argv[1]);
|
||||
a = strtod(argv[2], NULL);
|
||||
b = strtod(argv[3], NULL);
|
||||
while (cnt-- > 0) {
|
||||
for (i = 0; i < sizeof(a); i++) {
|
||||
unsigned char c = ((char*)(&a))[i];
|
||||
printf("%x%x", (c >> 4), (c & 0xf));
|
||||
}
|
||||
printf(" %f\n", a);
|
||||
a = nextafterf(a, b);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
Reference in new issue
Block a user