From 29fa06188a82dd50f19fc2400d88da3d9d94878f Mon Sep 17 00:00:00 2001 From: Juan Jose Garcia Ripoll Date: Sat, 25 Dec 2010 19:29:56 +0100 Subject: [PATCH] Fixed rounding towards even numbers in ROUND. --- src/c/num_co.d | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/c/num_co.d b/src/c/num_co.d index 8dd4a6e50..dd97ac6ee 100644 --- a/src/c/num_co.d +++ b/src/c/num_co.d @@ -620,11 +620,9 @@ static double round_double(double d) { if (d >= 0) { - double q = floor(d + 0.5); - d -= q; - if (d == -0.5) { - double x = q / 10; - int i = (int)(10 * (x - floor(x))); + double q = floor(d += 0.5); + if (q == d) { + int i = (int)fmod(q, 10); if (i & 1) { return q-1; } @@ -640,11 +638,9 @@ static long double round_long_double(long double d) { if (d >= 0) { - long double q = floorl(d + 0.5); - d -= q; - if (d == -0.5) { - long double x = q / 10; - int i = (int)(10 * (x - floorl(x))); + long double q = floorl(d += 0.5); + if (q == d) { + int i = (int)fmodl(q, 10); if (i & 1) { return q-1; }