(Если это квалифицируется как некромантия потока, пожалуйста, сообщите, и я удалю это)
Быстрый способ вернуть округленное вверх число - это добавить делитель минус один к дивиденду и разделить.
int ceil_div(int dividend, int divisor) {
return (dividend + divisor - 1) / divisor;
}
или, альтернативно,
int ceil_div(int dividend, int divisor) {
return (dividend - 1) / divisor + 1;
}
Соответственно, вы будете работать, вычитая 1 из 3, деля на 2 и добавляя 1.
Я попытаюсь объяснить, почему это работает. Если бы делимое и делитель были оба числами с плавающей запятой, то усеченный целочисленный эквивалент ( делимого / делителя ) был бы равен потолку частное, если делитель отлично делит дивиденд , или на единицу меньше, если оно не делит дивиденд . Вычитая 1, мы гарантируем, что новый дивиденд, divind - 1 , при делении на divisor , всегда будет возвращать значение, меньшее, чем потолок отношения с плавающей запятой.
Все, что осталось теперь, это добавить 1 к этому частному, который, кстати, является дивизором пола ((с плавающей запятой) / (с плавающей запятой)).