C++ 中的除法汇总

Division Round Up in C++

在 C++ 中对两个 int 值执行除法而不使用 std::ceil 时如何舍入?

通常我最终会做如下事情:

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

有什么方法可以在不使用 std::ceil 的情况下复制结果?

你可以这样做

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

基本上如果有余数,截断整数结果加1

如果ab都是正数,你可以完全避免浮点数,通过经典方法得到精确的结果(FP舍入没有问题)和更快的执行时间:

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

对于负数 a 您不需要任何修正 - 整数除法执行的截断已经具有与您的 ceil 公式匹配的语义;所以,如果你想要一个更一般的案例:

int res = (a<0 ? a : (a + (b - 1))) / b;