Module: wine Branch: master Commit: fca34420f6348a0344a3eff4f1d882d2b67873f8 URL: https://source.winehq.org/git/wine.git/?a=commit;h=fca34420f6348a0344a3eff4f...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Oct 26 10:33:39 2021 +0200
ntdll: Copy ceil() implementation from msvcrt.
Signed-off-by: Alexandre Julliard julliard@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; }
/*********************************************************************