Module: wine Branch: master Commit: 0d6c905add980db7902164d59576977d41b9230d URL: https://gitlab.winehq.org/wine/wine/-/commit/0d6c905add980db7902164d59576977...
Author: Robert Wilhelm robert.wilhelm@gmx.net Date: Tue Nov 28 21:28:33 2023 +0100
oleaut32: Fix VarR8Round for negative numbers.
Floats with fractional part 0.5000 should be rounded to next even number.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55185
---
dlls/oleaut32/tests/vartype.c | 7 +++++++ dlls/oleaut32/vartype.c | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/dlls/oleaut32/tests/vartype.c b/dlls/oleaut32/tests/vartype.c index 36b04aead81..9426272d7be 100644 --- a/dlls/oleaut32/tests/vartype.c +++ b/dlls/oleaut32/tests/vartype.c @@ -2716,6 +2716,13 @@ static void test_VarR8Round(void) MATHRND(1.4999, 0); EXPECT(1); MATHRND(1.5000, 0); EXPECT(2); MATHRND(1.5001, 0); EXPECT(2); + + MATHRND(-0.4999, 0); EXPECT(0); + MATHRND(-0.5000, 0); EXPECT(0); + MATHRND(-0.5001, 0); EXPECT(-1); + MATHRND(-1.4999, 0); EXPECT(-1); + MATHRND(-1.5000, 0); EXPECT(-2); + MATHRND(-1.5001, 0); EXPECT(-2); }
/* diff --git a/dlls/oleaut32/vartype.c b/dlls/oleaut32/vartype.c index 7dd6cb8c4a6..d51cee3ee82 100644 --- a/dlls/oleaut32/vartype.c +++ b/dlls/oleaut32/vartype.c @@ -3379,7 +3379,7 @@ HRESULT WINAPI VarR8Round(double dblIn, int nDig, double *pDblOut) else if (fract >= 0.0) dblIn = whole; else if (fract == -0.5) - dblIn = whole - fmod(whole, 2.0); + dblIn = whole + fmod(whole, 2.0); else if (fract > -0.5) dblIn = whole; else