C++ 中的除法汇总

cod*_*jam 1 c++ division integer-division ceil c++11

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

通常,我最终会执行以下操作:

double res = ceil(a / (double) b);
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*lia 5

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

int res = (a + (b - 1)) / b;
Run Code Online (Sandbox Code Playgroud)

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

int res = (a<0 ? a : (a + (b - 1))) / b;
Run Code Online (Sandbox Code Playgroud)

  • 如果它们都是正数,则 `(a-1)/b + 1` 更好,因为它不会溢出。 (3认同)