【发布时间】:2022-01-08 17:10:00
【问题描述】:
考虑以下函数:
auto f(double a, double b) -> int
{
return std::floor(a/b);
}
所以我想计算最大整数k 使得k * b <= a 在数学意义上。
由于可能存在舍入错误,我不确定上述函数是否真的计算了这个k。我不担心k 可能超出范围的情况。
确定这个k 的正确方法是什么?
【问题讨论】:
-
double的值范围比int的大,所以有些值对于int来说太大或太小。你没有以任何方式处理那个案子。也就是说,我过去做过类似的事情,只是为极端情况编写了单元测试。 -
我建议使用您的函数查找 k,然后检查 k-1、k 和 k+1 是否满足条件。然后选择满足的最大的。 (您可能需要使用 long long)
标签: c++ rounding-error floor-division