首页 > 解决方案 > C++ 中的除法舍入

问题描述

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

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

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

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

标签: c++c++11divisioninteger-divisionceil

解决方案


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

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

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

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

推荐阅读