Подразделение Round Up в C ++ - PullRequest
1 голос
/ 27 мая 2020

Как округлить при выполнении деления двух значений int в C ++ без использования std::ceil?

Обычно я делаю что-то вроде следующего:

double res = ceil(a / (double) b);

Можно ли как-нибудь продублировать результат без использования std::ceil?

Ответы [ 2 ]

5 голосов
/ 27 мая 2020

Если a и b положительны, вы можете полностью избежать операций с плавающей запятой и получить как точные результаты (без проблем с округлением FP), так и более быстрое время выполнения с помощью классического метода:

int res = (a + (b - 1)) / b;

Для отрицательного значения a исправление не требуется - усечение, выполняемое целочисленным делением, уже имеет семантику, соответствующую вашей формуле ceil; Итак, если вам нужен более общий случай:

int res = (a<0 ? a : (a + (b - 1))) / b;
3 голосов
/ 27 мая 2020

вы могли бы это сделать

double res = (double) (((a % b) == 0) ? (a / b) : (a / b) + 1);

в основном, если есть остаток, добавьте 1 к усеченному целочисленному результату

...