Целочисленное деление с округлением вверх

168
17 декабря 2018, 03:10

Есть ли оператор целочисленного деления с округлением вверх? Чтобы было так:

1 / N = 1
2 / N = 1
...
N / N = 1
N + 1 / N = 2
N + 2 / N = 2
...
2N / N = 2
2N + 1 / N = 3
...

Или как это можно реализовать без использования математики, только на встроенных примитивах и целых типах данных?

UPD: встроенного нет, тогда можно ли упростить следующую функцию:

int div_up(int x, int y)
{
    return x / y + (x%y ? 1 : 0);
}
Answer 1

Не знаю, на сколько это проще, но можно так

int div_up(int x, int y)
{
    return (x + y - 1) / y;
}

Ну и подумать, что такое округление вверх для отрицательных чисел

Update

Чтобы избежать возможного переполнения, выражение можно переписать так

int div_up(int x, int y)
{
    return (x - 1) / y + 1;
}
Answer 2

Можно использовать функцию ceil() из <math.h>. Примеры можно посмотреть по ссылке: www.cplusplus.com

READ ALSO
C++ и API OpenMP переменная среды

C++ и API OpenMP переменная среды

начал изучать параллельное программирование, подключил API OpenMP в проект C++Добавлением кода

171
Работа с указателями в C++

Работа с указателями в C++

Допустим, я объявляю переменную

155
Не работает SocketIO в проекте cocos2d

Не работает SocketIO в проекте cocos2d

Я создал локальный сервер на node js, к которому должны подключаться клиенты и сохраняться в массиве:

191
Как установить скроллинг для виджета

Как установить скроллинг для виджета

Делаю виджет — диаграмму времени, которая будет отображать посчитанные моменты времени для разных групп объектов:

189