Page 1 of 1

Posted: Wed Feb 27, 2002 6:37 pm
by LittleJohn
hi, all:
I include <math.h> and use the "rint" function. Its return type is double. My code is just like "int = (int)rint(double)." It can work correctly on my machine. But I don't know whether the online judge system can work or not. I have an experience that in a Wrong Answer program I use "int = (int)rint(double)", but when I write the "rint" function by myself and I got Accepted. If anyone got the same trouble with me? Or can anybody share your experience to get the integer that is nearest to a double type variable. I hate the floating point error ><... Thanks Anyway!! ^^

Posted: Thu Feb 28, 2002 5:35 am
by pochmann
I think it always worked fine for me. Can we see your self-written function?

Stefan

Posted: Thu Feb 28, 2002 1:26 pm
by LittleJohn
int round(double d)
{
double f, c;
f = floor(d);
c = ceil(d);
if (c - d > d - f)
return (int)f;
else
return (int)c;
}

Posted: Thu Feb 28, 2002 1:47 pm
by Stefan Pochmann
Hmm, looks good. I can't really imagine why this should differ to rint(...). Maybe you had a value close to x.5 and your subtractions cause rounding errors that result in a different value than rint(), which will probably not do any computation.

But with this, my advice can only be: "Good *luck* next time". A value close to x.5 will *always* be risky.

What you can sometimes do is check back whether the value is correct. For example, say you've calculated y=rint(sqrt(x)). Then check if y*y==x and if not, try y-1 and y+1.

Stefan

Posted: Thu Feb 28, 2002 4:32 pm
by shahriar_manzoor
Do you know that
round(x) = floor(x+0.5);
I think this is the best solution.