mirror of https://github.com/libsdl-org/SDL
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:
parent
0c16f4faf0
commit
2e465ae31b
|
@ -1098,7 +1098,7 @@ if(SDL_LIBC)
|
||||||
set(${_HAVE_H} 1)
|
set(${_HAVE_H} 1)
|
||||||
endforeach()
|
endforeach()
|
||||||
set(HAVE_SIGNAL_H 1)
|
set(HAVE_SIGNAL_H 1)
|
||||||
foreach(_FN abs acos acosf asin asinf atan atan2 atan2f atanf atof atoi bsearch calloc ceil ceilf copysign copysignf cos cosf exp expf fabs fabsf floor floorf fmod fmodf free itoa log log10 log10f logf lround lroundf _ltoa malloc memcmp memcpy memmove memset modf modff nextafter nextafterf pow powf qsort realloc round roundf scalbn scalbnf sin sinf sqrt sqrtf sscanf strchr strcmp _stricmp strlen _strlwr strncmp _strnicmp strrchr _strrev strstr strtod strtol strtoll strtoul _strupr tan tanf trunc truncf _ultoa wcscmp _wcsdup wcsdup _wcsicmp wcslen wcsncmp _wcsnicmp wcsstr wcstol)
|
foreach(_FN abs acos acosf asin asinf atan atan2 atan2f atanf atof atoi bsearch calloc ceil ceilf copysign copysignf cos cosf exp expf fabs fabsf floor floorf fmod fmodf free itoa log log10 log10f logf lround lroundf _ltoa malloc memcmp memcpy memmove memset modf modff pow powf qsort realloc round roundf scalbn scalbnf sin sinf sqrt sqrtf sscanf strchr strcmp _stricmp strlen _strlwr strncmp _strnicmp strrchr _strrev strstr strtod strtol strtoll strtoul _strupr tan tanf trunc truncf _ultoa wcscmp _wcsdup wcsdup _wcsicmp wcslen wcsncmp _wcsnicmp wcsstr wcstol)
|
||||||
string(TOUPPER ${_FN} _UPPER)
|
string(TOUPPER ${_FN} _UPPER)
|
||||||
set(HAVE_${_UPPER} 1)
|
set(HAVE_${_UPPER} 1)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
@ -1167,8 +1167,8 @@ if(SDL_LIBC)
|
||||||
foreach(_FN
|
foreach(_FN
|
||||||
atan atan2 atanf atan2f ceil ceilf copysign copysignf cos cosf
|
atan atan2 atanf atan2f ceil ceilf copysign copysignf cos cosf
|
||||||
exp expf fabs fabsf floor floorf fmod fmodf log logf log10 log10f
|
exp expf fabs fabsf floor floorf fmod fmodf log logf log10 log10f
|
||||||
lround lroundf modf modff nextafter nextafterf pow powf round roundf
|
lround lroundf pow powf round roundf scalbn scalbnf sin sinf sqrt
|
||||||
scalbn scalbnf sin sinf sqrt sqrtf tan tanf acos acosf asin asinf trunc truncf)
|
sqrtf tan tanf acos acosf asin asinf trunc truncf)
|
||||||
string(TOUPPER ${_FN} _UPPER)
|
string(TOUPPER ${_FN} _UPPER)
|
||||||
set(LIBC_HASVAR "LIBC_HAS_${_UPPER}")
|
set(LIBC_HASVAR "LIBC_HAS_${_UPPER}")
|
||||||
check_symbol_exists("${_FN}" "math.h" ${LIBC_HASVAR})
|
check_symbol_exists("${_FN}" "math.h" ${LIBC_HASVAR})
|
||||||
|
|
|
@ -668,8 +668,6 @@
|
||||||
<ClCompile Include="..\..\src\libm\s_fabs.c" />
|
<ClCompile Include="..\..\src\libm\s_fabs.c" />
|
||||||
<ClCompile Include="..\..\src\libm\s_floor.c" />
|
<ClCompile Include="..\..\src\libm\s_floor.c" />
|
||||||
<ClCompile Include="..\..\src\libm\s_modf.c" />
|
<ClCompile Include="..\..\src\libm\s_modf.c" />
|
||||||
<ClCompile Include="..\..\src\libm\s_nextafter.c" />
|
|
||||||
<ClCompile Include="..\..\src\libm\s_nextafterf.c" />
|
|
||||||
<ClCompile Include="..\..\src\libm\s_scalbn.c" />
|
<ClCompile Include="..\..\src\libm\s_scalbn.c" />
|
||||||
<ClCompile Include="..\..\src\libm\s_sin.c" />
|
<ClCompile Include="..\..\src\libm\s_sin.c" />
|
||||||
<ClCompile Include="..\..\src\libm\s_tan.c" />
|
<ClCompile Include="..\..\src\libm\s_tan.c" />
|
||||||
|
@ -787,4 +785,4 @@
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -985,12 +985,6 @@
|
||||||
<ClCompile Include="..\..\src\libm\s_modf.c">
|
<ClCompile Include="..\..\src\libm\s_modf.c">
|
||||||
<Filter>libm</Filter>
|
<Filter>libm</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\libm\s_nextafter.c">
|
|
||||||
<Filter>libm</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\libm\s_nextafterf.c">
|
|
||||||
<Filter>libm</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\libm\s_scalbn.c">
|
<ClCompile Include="..\..\src\libm\s_scalbn.c">
|
||||||
<Filter>libm</Filter>
|
<Filter>libm</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -1392,4 +1386,4 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="..\..\src\core\windows\version.rc" />
|
<ResourceCompile Include="..\..\src\core\windows\version.rc" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -547,8 +547,6 @@
|
||||||
<ClCompile Include="..\..\src\libm\s_fabs.c" />
|
<ClCompile Include="..\..\src\libm\s_fabs.c" />
|
||||||
<ClCompile Include="..\..\src\libm\s_floor.c" />
|
<ClCompile Include="..\..\src\libm\s_floor.c" />
|
||||||
<ClCompile Include="..\..\src\libm\s_modf.c" />
|
<ClCompile Include="..\..\src\libm\s_modf.c" />
|
||||||
<ClCompile Include="..\..\src\libm\s_nextafter.c" />
|
|
||||||
<ClCompile Include="..\..\src\libm\s_nextafterf.c" />
|
|
||||||
<ClCompile Include="..\..\src\libm\s_scalbn.c" />
|
<ClCompile Include="..\..\src\libm\s_scalbn.c" />
|
||||||
<ClCompile Include="..\..\src\libm\s_sin.c" />
|
<ClCompile Include="..\..\src\libm\s_sin.c" />
|
||||||
<ClCompile Include="..\..\src\libm\s_tan.c" />
|
<ClCompile Include="..\..\src\libm\s_tan.c" />
|
||||||
|
|
|
@ -964,12 +964,6 @@
|
||||||
<ClCompile Include="..\..\src\libm\s_modf.c">
|
<ClCompile Include="..\..\src\libm\s_modf.c">
|
||||||
<Filter>libm</Filter>
|
<Filter>libm</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\libm\s_nextafter.c">
|
|
||||||
<Filter>libm</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\libm\s_nextafterf.c">
|
|
||||||
<Filter>libm</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\libm\s_scalbn.c">
|
<ClCompile Include="..\..\src\libm\s_scalbn.c">
|
||||||
<Filter>libm</Filter>
|
<Filter>libm</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
|
@ -640,8 +640,6 @@ extern DECLSPEC double SDLCALL SDL_log10(double x);
|
||||||
extern DECLSPEC float SDLCALL SDL_log10f(float x);
|
extern DECLSPEC float SDLCALL SDL_log10f(float x);
|
||||||
extern DECLSPEC double SDLCALL SDL_modf(double x, double *y);
|
extern DECLSPEC double SDLCALL SDL_modf(double x, double *y);
|
||||||
extern DECLSPEC float SDLCALL SDL_modff(float x, float *y);
|
extern DECLSPEC float SDLCALL SDL_modff(float x, float *y);
|
||||||
extern DECLSPEC double SDLCALL SDL_nextafter(double from, double to);
|
|
||||||
extern DECLSPEC float SDLCALL SDL_nextafterf(float from, float to);
|
|
||||||
extern DECLSPEC double SDLCALL SDL_pow(double x, double y);
|
extern DECLSPEC double SDLCALL SDL_pow(double x, double y);
|
||||||
extern DECLSPEC float SDLCALL SDL_powf(float x, float y);
|
extern DECLSPEC float SDLCALL SDL_powf(float x, float y);
|
||||||
extern DECLSPEC double SDLCALL SDL_round(double x);
|
extern DECLSPEC double SDLCALL SDL_round(double x);
|
||||||
|
|
|
@ -168,8 +168,6 @@
|
||||||
#cmakedefine HAVE_LROUNDF 1
|
#cmakedefine HAVE_LROUNDF 1
|
||||||
#cmakedefine HAVE_MODF 1
|
#cmakedefine HAVE_MODF 1
|
||||||
#cmakedefine HAVE_MODFF 1
|
#cmakedefine HAVE_MODFF 1
|
||||||
#cmakedefine HAVE_NEXTAFTER 1
|
|
||||||
#cmakedefine HAVE_NEXTAFTERF 1
|
|
||||||
#cmakedefine HAVE_POW 1
|
#cmakedefine HAVE_POW 1
|
||||||
#cmakedefine HAVE_POWF 1
|
#cmakedefine HAVE_POWF 1
|
||||||
#cmakedefine HAVE_ROUND 1
|
#cmakedefine HAVE_ROUND 1
|
||||||
|
|
|
@ -121,9 +121,6 @@
|
||||||
#define HAVE_LROUND 1
|
#define HAVE_LROUND 1
|
||||||
#define HAVE_LROUNDF 1
|
#define HAVE_LROUNDF 1
|
||||||
#define HAVE_MODF 1
|
#define HAVE_MODF 1
|
||||||
#define HAVE_MODFF 1
|
|
||||||
#define HAVE_NEXTAFTER 1
|
|
||||||
#define HAVE_NEXTAFTERF 1
|
|
||||||
#define HAVE_POW 1
|
#define HAVE_POW 1
|
||||||
#define HAVE_POWF 1
|
#define HAVE_POWF 1
|
||||||
#define HAVE_ROUND 1
|
#define HAVE_ROUND 1
|
||||||
|
|
|
@ -115,9 +115,6 @@
|
||||||
#define HAVE_LROUND 1
|
#define HAVE_LROUND 1
|
||||||
#define HAVE_LROUNDF 1
|
#define HAVE_LROUNDF 1
|
||||||
#define HAVE_MODF 1
|
#define HAVE_MODF 1
|
||||||
#define HAVE_MODFF 1
|
|
||||||
#define HAVE_NEXTAFTER 1
|
|
||||||
#define HAVE_NEXTAFTERF 1
|
|
||||||
#define HAVE_POW 1
|
#define HAVE_POW 1
|
||||||
#define HAVE_POWF 1
|
#define HAVE_POWF 1
|
||||||
#define HAVE_ROUND 1
|
#define HAVE_ROUND 1
|
||||||
|
|
|
@ -117,9 +117,6 @@
|
||||||
#define HAVE_LROUND 1
|
#define HAVE_LROUND 1
|
||||||
#define HAVE_LROUNDF 1
|
#define HAVE_LROUNDF 1
|
||||||
#define HAVE_MODF 1
|
#define HAVE_MODF 1
|
||||||
#define HAVE_MODFF 1
|
|
||||||
#define HAVE_NEXTAFTER 1
|
|
||||||
#define HAVE_NEXTAFTERF 1
|
|
||||||
#define HAVE_POW 1
|
#define HAVE_POW 1
|
||||||
#define HAVE_POWF 1
|
#define HAVE_POWF 1
|
||||||
#define HAVE_ROUND 1
|
#define HAVE_ROUND 1
|
||||||
|
|
|
@ -135,9 +135,6 @@
|
||||||
#define HAVE_LROUND 1
|
#define HAVE_LROUND 1
|
||||||
#define HAVE_LROUNDF 1
|
#define HAVE_LROUNDF 1
|
||||||
#define HAVE_MODF 1
|
#define HAVE_MODF 1
|
||||||
#define HAVE_MODFF 1
|
|
||||||
#define HAVE_NEXTAFTER 1
|
|
||||||
#define HAVE_NEXTAFTERF 1
|
|
||||||
#define HAVE_POW 1
|
#define HAVE_POW 1
|
||||||
#define HAVE_POWF 1
|
#define HAVE_POWF 1
|
||||||
#define HAVE_ROUND 1
|
#define HAVE_ROUND 1
|
||||||
|
|
|
@ -866,8 +866,6 @@ SDL3_0.0.0 {
|
||||||
SDL_hid_get_report_descriptor;
|
SDL_hid_get_report_descriptor;
|
||||||
SDL_HasWindowSurface;
|
SDL_HasWindowSurface;
|
||||||
SDL_DestroyWindowSurface;
|
SDL_DestroyWindowSurface;
|
||||||
SDL_nextafter;
|
|
||||||
SDL_nextafterf;
|
|
||||||
# extra symbols go here (don't modify this line)
|
# extra symbols go here (don't modify this line)
|
||||||
local: *;
|
local: *;
|
||||||
};
|
};
|
||||||
|
|
|
@ -892,5 +892,3 @@
|
||||||
#define SDL_hid_get_report_descriptor SDL_hid_get_report_descriptor_REAL
|
#define SDL_hid_get_report_descriptor SDL_hid_get_report_descriptor_REAL
|
||||||
#define SDL_HasWindowSurface SDL_HasWindowSurface_REAL
|
#define SDL_HasWindowSurface SDL_HasWindowSurface_REAL
|
||||||
#define SDL_DestroyWindowSurface SDL_DestroyWindowSurface_REAL
|
#define SDL_DestroyWindowSurface SDL_DestroyWindowSurface_REAL
|
||||||
#define SDL_nextafter SDL_nextafter_REAL
|
|
||||||
#define SDL_nextafterf SDL_nextafterf_REAL
|
|
||||||
|
|
|
@ -937,5 +937,3 @@ SDL_DYNAPI_PROC(SDL_hid_device_info*,SDL_hid_get_device_info,(SDL_hid_device *a)
|
||||||
SDL_DYNAPI_PROC(int,SDL_hid_get_report_descriptor,(SDL_hid_device *a, unsigned char *b, size_t c),(a,b,c),return)
|
SDL_DYNAPI_PROC(int,SDL_hid_get_report_descriptor,(SDL_hid_device *a, unsigned char *b, size_t c),(a,b,c),return)
|
||||||
SDL_DYNAPI_PROC(SDL_bool,SDL_HasWindowSurface,(SDL_Window *a),(a),return)
|
SDL_DYNAPI_PROC(SDL_bool,SDL_HasWindowSurface,(SDL_Window *a),(a),return)
|
||||||
SDL_DYNAPI_PROC(int,SDL_DestroyWindowSurface,(SDL_Window *a),(a),return)
|
SDL_DYNAPI_PROC(int,SDL_DestroyWindowSurface,(SDL_Window *a),(a),return)
|
||||||
SDL_DYNAPI_PROC(double,SDL_nextafter,(double a, double b),(a,b),return)
|
|
||||||
SDL_DYNAPI_PROC(float,SDL_nextafterf,(float a, float b),(a,b),return)
|
|
||||||
|
|
|
@ -37,8 +37,6 @@ double SDL_uclibc_fmod(double x, double y);
|
||||||
double SDL_uclibc_log(double x);
|
double SDL_uclibc_log(double x);
|
||||||
double SDL_uclibc_log10(double x);
|
double SDL_uclibc_log10(double x);
|
||||||
double SDL_uclibc_modf(double x, double *y);
|
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_pow(double x, double y);
|
||||||
double SDL_uclibc_scalbn(double x, int n);
|
double SDL_uclibc_scalbn(double x, int n);
|
||||||
double SDL_uclibc_sin(double x);
|
double SDL_uclibc_sin(double x);
|
||||||
|
|
|
@ -41,8 +41,6 @@ typedef unsigned int u_int32_t;
|
||||||
#define __ieee754_log SDL_uclibc_log
|
#define __ieee754_log SDL_uclibc_log
|
||||||
#define __ieee754_log10 SDL_uclibc_log10
|
#define __ieee754_log10 SDL_uclibc_log10
|
||||||
#define modf SDL_uclibc_modf
|
#define modf SDL_uclibc_modf
|
||||||
#define nextafter SDL_uclibc_nextafter
|
|
||||||
#define nextafterf SDL_uclibc_nextafterf
|
|
||||||
#define __ieee754_pow SDL_uclibc_pow
|
#define __ieee754_pow SDL_uclibc_pow
|
||||||
#define scalbln SDL_uclibc_scalbln
|
#define scalbln SDL_uclibc_scalbln
|
||||||
#define scalbn SDL_uclibc_scalbn
|
#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,
|
extern int32_t __kernel_rem_pio2(const double *, double *, int, int, const unsigned int,
|
||||||
const int32_t *) attribute_hidden;
|
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_ */
|
#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
|
|
|
@ -24,7 +24,8 @@
|
||||||
|
|
||||||
#include "../libm/math_libm.h"
|
#include "../libm/math_libm.h"
|
||||||
|
|
||||||
double SDL_atan(double x)
|
double
|
||||||
|
SDL_atan(double x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ATAN
|
#ifdef HAVE_ATAN
|
||||||
return atan(x);
|
return atan(x);
|
||||||
|
@ -42,7 +43,8 @@ float SDL_atanf(float x)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_atan2(double y, double x)
|
double
|
||||||
|
SDL_atan2(double y, double x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ATAN2
|
#ifdef HAVE_ATAN2
|
||||||
return atan2(y, x);
|
return atan2(y, x);
|
||||||
|
@ -60,7 +62,8 @@ float SDL_atan2f(float y, float x)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_acos(double val)
|
double
|
||||||
|
SDL_acos(double val)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ACOS
|
#ifdef HAVE_ACOS
|
||||||
return acos(val);
|
return acos(val);
|
||||||
|
@ -87,7 +90,8 @@ float SDL_acosf(float val)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_asin(double val)
|
double
|
||||||
|
SDL_asin(double val)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ASIN
|
#ifdef HAVE_ASIN
|
||||||
return asin(val);
|
return asin(val);
|
||||||
|
@ -111,7 +115,8 @@ float SDL_asinf(float val)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_ceil(double x)
|
double
|
||||||
|
SDL_ceil(double x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_CEIL
|
#ifdef HAVE_CEIL
|
||||||
return ceil(x);
|
return ceil(x);
|
||||||
|
@ -134,7 +139,8 @@ float SDL_ceilf(float x)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_copysign(double x, double y)
|
double
|
||||||
|
SDL_copysign(double x, double y)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_COPYSIGN
|
#ifdef HAVE_COPYSIGN
|
||||||
return copysign(x, y);
|
return copysign(x, y);
|
||||||
|
@ -160,7 +166,8 @@ float SDL_copysignf(float x, float y)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_cos(double x)
|
double
|
||||||
|
SDL_cos(double x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_COS
|
#ifdef HAVE_COS
|
||||||
return cos(x);
|
return cos(x);
|
||||||
|
@ -178,7 +185,8 @@ float SDL_cosf(float x)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_exp(double x)
|
double
|
||||||
|
SDL_exp(double x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_EXP
|
#ifdef HAVE_EXP
|
||||||
return exp(x);
|
return exp(x);
|
||||||
|
@ -196,7 +204,8 @@ float SDL_expf(float x)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_fabs(double x)
|
double
|
||||||
|
SDL_fabs(double x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_FABS
|
#ifdef HAVE_FABS
|
||||||
return fabs(x);
|
return fabs(x);
|
||||||
|
@ -214,7 +223,8 @@ float SDL_fabsf(float x)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_floor(double x)
|
double
|
||||||
|
SDL_floor(double x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_FLOOR
|
#ifdef HAVE_FLOOR
|
||||||
return floor(x);
|
return floor(x);
|
||||||
|
@ -232,7 +242,8 @@ float SDL_floorf(float x)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_trunc(double x)
|
double
|
||||||
|
SDL_trunc(double x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_TRUNC
|
#ifdef HAVE_TRUNC
|
||||||
return trunc(x);
|
return trunc(x);
|
||||||
|
@ -254,7 +265,8 @@ float SDL_truncf(float x)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_fmod(double x, double y)
|
double
|
||||||
|
SDL_fmod(double x, double y)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_FMOD
|
#ifdef HAVE_FMOD
|
||||||
return fmod(x, y);
|
return fmod(x, y);
|
||||||
|
@ -272,7 +284,8 @@ float SDL_fmodf(float x, float y)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_log(double x)
|
double
|
||||||
|
SDL_log(double x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LOG
|
#ifdef HAVE_LOG
|
||||||
return log(x);
|
return log(x);
|
||||||
|
@ -290,7 +303,8 @@ float SDL_logf(float x)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_log10(double x)
|
double
|
||||||
|
SDL_log10(double x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LOG10
|
#ifdef HAVE_LOG10
|
||||||
return log10(x);
|
return log10(x);
|
||||||
|
@ -308,7 +322,8 @@ float SDL_log10f(float x)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_modf(double x, double *y)
|
double
|
||||||
|
SDL_modf(double x, double *y)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_MODF
|
#ifdef HAVE_MODF
|
||||||
return modf(x, y);
|
return modf(x, y);
|
||||||
|
@ -329,25 +344,8 @@ float SDL_modff(float x, float *y)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_nextafter(double from, double to)
|
double
|
||||||
{
|
SDL_pow(double x, double y)
|
||||||
#ifdef HAVE_NEXTAFTER
|
|
||||||
return nextafter(from, to);
|
|
||||||
#else
|
|
||||||
return SDL_uclibc_nextafter(from, to);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
float SDL_nextafterf(float from, float to)
|
|
||||||
{
|
|
||||||
#ifdef HAVE_NEXTAFTERF
|
|
||||||
return nextafterf(from, to);
|
|
||||||
#else
|
|
||||||
return SDL_uclibc_nextafterf(from, to);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
double SDL_pow(double x, double y)
|
|
||||||
{
|
{
|
||||||
#ifdef HAVE_POW
|
#ifdef HAVE_POW
|
||||||
return pow(x, y);
|
return pow(x, y);
|
||||||
|
@ -365,7 +363,8 @@ float SDL_powf(float x, float y)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_round(double arg)
|
double
|
||||||
|
SDL_round(double arg)
|
||||||
{
|
{
|
||||||
#if defined HAVE_ROUND
|
#if defined HAVE_ROUND
|
||||||
return round(arg);
|
return round(arg);
|
||||||
|
@ -405,7 +404,8 @@ long SDL_lroundf(float arg)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_scalbn(double x, int n)
|
double
|
||||||
|
SDL_scalbn(double x, int n)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_SCALBN
|
#ifdef HAVE_SCALBN
|
||||||
return scalbn(x, n);
|
return scalbn(x, n);
|
||||||
|
@ -429,7 +429,8 @@ float SDL_scalbnf(float x, int n)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_sin(double x)
|
double
|
||||||
|
SDL_sin(double x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_SIN
|
#ifdef HAVE_SIN
|
||||||
return sin(x);
|
return sin(x);
|
||||||
|
@ -447,7 +448,8 @@ float SDL_sinf(float x)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_sqrt(double x)
|
double
|
||||||
|
SDL_sqrt(double x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_SQRT
|
#ifdef HAVE_SQRT
|
||||||
return sqrt(x);
|
return sqrt(x);
|
||||||
|
@ -465,7 +467,8 @@ float SDL_sqrtf(float x)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
double SDL_tan(double x)
|
double
|
||||||
|
SDL_tan(double x)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_TAN
|
#ifdef HAVE_TAN
|
||||||
return tan(x);
|
return tan(x);
|
||||||
|
|
|
@ -1293,52 +1293,6 @@ modf_baseCases(void *args)
|
||||||
return TEST_COMPLETED;
|
return TEST_COMPLETED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SDL_nextafter tests functions */
|
|
||||||
|
|
||||||
static int
|
|
||||||
nextafter_baseCases(void *args)
|
|
||||||
{
|
|
||||||
double value, expected;
|
|
||||||
|
|
||||||
value = SDL_nextafter(0.0, 1.0);
|
|
||||||
expected = 4.940656458412e-324;
|
|
||||||
SDLTest_AssertCheck(value == expected,
|
|
||||||
"nextafter(%f), expected %f, got %f",
|
|
||||||
0.0, expected, value);
|
|
||||||
|
|
||||||
value = SDL_nextafter(1.0, 2.0);
|
|
||||||
expected = 1.0000000000000002;
|
|
||||||
SDLTest_AssertCheck(value == expected,
|
|
||||||
"nextafter(%f), expected %f, got %f",
|
|
||||||
1.0, expected, value);
|
|
||||||
|
|
||||||
return TEST_COMPLETED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SDL_nextafterf tests functions */
|
|
||||||
|
|
||||||
static int
|
|
||||||
nextafterf_baseCases(void *args)
|
|
||||||
{
|
|
||||||
float value, expected;
|
|
||||||
|
|
||||||
#if 0 /* Some compilers truncate this to zero */
|
|
||||||
value = SDL_nextafterf(0.0f, 1.0f);
|
|
||||||
expected = 1.401e-45f;
|
|
||||||
SDLTest_AssertCheck(value == expected,
|
|
||||||
"nextafterf(%f), expected %f, got %f",
|
|
||||||
0.0, expected, value);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
value = SDL_nextafterf(1.0f, 2.0f);
|
|
||||||
expected = 1.00000012f;
|
|
||||||
SDLTest_AssertCheck(value == expected,
|
|
||||||
"nextafterf(%f), expected %f, got %f",
|
|
||||||
1.0, expected, value);
|
|
||||||
|
|
||||||
return TEST_COMPLETED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SDL_pow tests functions */
|
/* SDL_pow tests functions */
|
||||||
|
|
||||||
/* Tests with positive and negative infinities as exponents */
|
/* Tests with positive and negative infinities as exponents */
|
||||||
|
@ -3078,20 +3032,6 @@ static const SDLTest_TestCaseReference modfTestBase = {
|
||||||
"Checks the base cases", TEST_ENABLED
|
"Checks the base cases", TEST_ENABLED
|
||||||
};
|
};
|
||||||
|
|
||||||
/* SDL_nextafter test cases */
|
|
||||||
|
|
||||||
static const SDLTest_TestCaseReference nextafterTestBase = {
|
|
||||||
(SDLTest_TestCaseFp)nextafter_baseCases, "nextafter_baseCases",
|
|
||||||
"Checks the base cases", TEST_ENABLED
|
|
||||||
};
|
|
||||||
|
|
||||||
/* SDL_nextafterf test cases */
|
|
||||||
|
|
||||||
static const SDLTest_TestCaseReference nextafterfTestBase = {
|
|
||||||
(SDLTest_TestCaseFp)nextafterf_baseCases, "nextafterf_baseCases",
|
|
||||||
"Checks the base cases", TEST_ENABLED
|
|
||||||
};
|
|
||||||
|
|
||||||
/* SDL_pow test cases */
|
/* SDL_pow test cases */
|
||||||
|
|
||||||
static const SDLTest_TestCaseReference powTestExpInf1 = {
|
static const SDLTest_TestCaseReference powTestExpInf1 = {
|
||||||
|
@ -3405,8 +3345,6 @@ static const SDLTest_TestCaseReference *mathTests[] = {
|
||||||
|
|
||||||
&modfTestBase,
|
&modfTestBase,
|
||||||
|
|
||||||
&nextafterTestBase, &nextafterfTestBase,
|
|
||||||
|
|
||||||
&powTestExpInf1, &powTestExpInf2, &powTestExpInf3,
|
&powTestExpInf1, &powTestExpInf2, &powTestExpInf3,
|
||||||
&powTestBaseInf1, &powTestBaseInf2,
|
&powTestBaseInf1, &powTestBaseInf2,
|
||||||
&powTestNan1, &powTestNan2, &powTestNan3, &powTestNan4,
|
&powTestNan1, &powTestNan2, &powTestNan3, &powTestNan4,
|
||||||
|
|
Loading…
Reference in New Issue