mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-26 12:27:44 +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
|
||||
return ceil(x);
|
||||
#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 */
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user