Я хочу написать функцию для округления двойного значения до целого числа с использованием метода Banker Rounding (округление половины до четного: http://en.wikipedia.org/wiki/Rounding#Round_half_to_even), например:
int RoundToInt(double x);
Как я могу это сделать?
Обновление:
Лучшее, что я могу получить, это:
int RoundToInt(double x)
{
int s = (int)x;
double t = fabs(x - s);
if ((t < 0.5) || (t == 0.5 && s % 2 == 0))
{
return s;
}
else
{
if (x < 0)
{
return s - 1;
}
else
{
return s + 1;
}
}
}
Но это медленно, и я даже не уверен, что это точно.
Есть ли какой-нибудь быстрый и точный способ сделать это.