Alexandre Julliard : ntdll: Copy ceil() implementation from msvcrt.
Module: wine Branch: master Commit: fca34420f6348a0344a3eff4f1d882d2b67873f8 URL: https://source.winehq.org/git/wine.git/?a=commit;h=fca34420f6348a0344a3eff4f... Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Oct 26 10:33:39 2021 +0200 ntdll: Copy ceil() implementation from msvcrt. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/math.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/dlls/ntdll/math.c b/dlls/ntdll/math.c index 25477b44d4a..e7f5987a5af 100644 --- a/dlls/ntdll/math.c +++ b/dlls/ntdll/math.c @@ -146,10 +146,31 @@ double CDECL atan( double x ) /********************************************************************* * ceil (NTDLL.@) + * + * Based on musl: src/math/ceilf.c */ -double CDECL ceil( double d ) +double CDECL ceil( double x ) { - return unix_funcs->ceil( d ); + union {double f; UINT64 i;} u = {x}; + int e = (u.i >> 52 & 0x7ff) - 0x3ff; + UINT64 m; + + if (e >= 52) + return x; + if (e >= 0) { + m = 0x000fffffffffffffULL >> e; + if ((u.i & m) == 0) + return x; + if (u.i >> 63 == 0) + u.i += m; + u.i &= ~m; + } else { + if (u.i >> 63) + return -0.0; + else if (u.i << 1) + return 1.0; + } + return u.f; } /*********************************************************************
participants (1)
-
Alexandre Julliard