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
如果a
和b
都是正数,你可以完全避免浮点数,通过经典方法得到精确的结果(FP舍入没有问题)和更快的执行时间:
int res = (a + (b - 1)) / b;
对于负数 a
您不需要任何修正 - 整数除法执行的截断已经具有与您的 ceil
公式匹配的语义;所以,如果你想要一个更一般的案例:
int res = (a<0 ? a : (a + (b - 1))) / b;
在 C++ 中对两个 int
值执行除法而不使用 std::ceil
时如何舍入?
通常我最终会做如下事情:
double res = ceil(a / (double) b);
有什么方法可以在不使用 std::ceil
的情况下复制结果?
你可以这样做
double res = (double) (((a % b) == 0) ? (a / b) : (a / b) + 1);
基本上如果有余数,截断整数结果加1
如果a
和b
都是正数,你可以完全避免浮点数,通过经典方法得到精确的结果(FP舍入没有问题)和更快的执行时间:
int res = (a + (b - 1)) / b;
对于负数 a
您不需要任何修正 - 整数除法执行的截断已经具有与您的 ceil
公式匹配的语义;所以,如果你想要一个更一般的案例:
int res = (a<0 ? a : (a + (b - 1))) / b;