mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-11-03 17:24:34 +00:00
Fixed bug 2274 - SDL_ceil is incorrectly implemented when HAVE_LIBC is not defined
Ghassan Al-Mashareqa
The SDL_ceil function is implemented incorrectly when HAVE_CEIL is not defined (HAVE_LIBC not defined).
The following code:
double val = SDL_ceil(2.3);
printf("%g", val);
prints "2.0", as STD_ceil is defined as:
double
SDL_ceil(double x)
{
#ifdef HAVE_CEIL
return ceil(x);
#else
return (double)(int)((x)+0.5);
#endif /* HAVE_CEIL */
}
This functions is used in the SDL_BuildAudioResampleCVT function of the audio subsystem (SDL_audiocvt.c), and causes a bug in that function.
This commit is contained in:
@@ -52,7 +52,12 @@ SDL_ceil(double x)
|
|||||||
#ifdef HAVE_CEIL
|
#ifdef HAVE_CEIL
|
||||||
return ceil(x);
|
return ceil(x);
|
||||||
#else
|
#else
|
||||||
return (double)(int)((x)+0.5);
|
double integer = SDL_floor(x);
|
||||||
|
double fraction = x - integer;
|
||||||
|
if (fraction > 0.0) {
|
||||||
|
integer += 1.0;
|
||||||
|
}
|
||||||
|
return integer;
|
||||||
#endif /* HAVE_CEIL */
|
#endif /* HAVE_CEIL */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user