# [geos-devel] Is this symmetric rounding algorithm?

Mateusz Łoskot mateusz at loskot.net
Fri Feb 24 09:23:06 EST 2006

```Hi,
As strk suggested, I tried to google for a while and learn about
(a)symmetric rounding algos.
Here I put round_vc functionwhich is a changed version of rint_vc
function. IMHO round_vc does symmetring rounding, but I'd like someone
to check :-)

/*
Symmetric Rounding Algorithm
*/
double round_vc(double val)
{
double n;
double f = fabs(modf(val, &n));
if (val >= 0) {
if (f < 0.5) {
return floor(val);
} else if (f > 0.5) {
return ceil(val);
} else {
return (n + 1.0);
}
} else {
if (f < 0.5) {
return ceil(val);
} else if (f > 0.5) {
return floor(val);
} else {
return (n - 1.0);
}
}
}

/////////////////////////////////////////////////////
// TEST
#include <math.h>
#include <stdio.h>
int main()
{
double x = 5.5;
double x1 = -5.5;
double y = 6.5;
double y1 = -6.5;

printf("x:   %f \n", x);
printf("x1: %f \n", x1);
printf("y:   %f \n", y);
printf("y1: %f \n", y1);

printf("--- rint -------------------\n");
printf("x:   %f \n", rint_vc(x));
printf("x1: %f \n", rint_vc(x1));
printf("y:   %f \n", rint_vc(y));
printf("y1: %f \n", rint_vc(y1));

printf("--- round ------------------\n");
printf("x:   %f \n", round_vc(x));
printf("x1: %f \n", round_vc(x1));
printf("y:   %f \n", round_vc(y));
printf("y1: %f \n", round_vc(y1));

}

--
Mateusz Łoskot
http://mateusz.loskot.net

```