Как округлить двойное значение до целого, используя Banker's Rounding в C

Я хочу написать функцию для округления двойного значения до целого числа с использованием метода 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;
    }
  }
}

Но это медленно, и я даже не уверен, что это точно.

Есть ли какой-нибудь быстрый и точный способ сделать это.

6
задан EFanZh 2 June 2012 в 02:34
поделиться