如何检查两个二重的除法是否为整数



我有两个任意的替身。只有当一个双精度除以另一个双误差是整数时,代码才应该继续。所以我真的不能把结果搞砸。我可以做一个普通的二重除法,然后检查结果是否在指定整数的小范围内,但这看起来很混乱。

有人知道更好的解决方案吗?

感谢

要测试一个整数是否可以被另一个整数整除,可以使用std::fmod。CCD_ 2返回除法的余数。如果余数为零,那么这些数字必须是可整除的。

#include <cmath>
constexpr double EPSILON = 1.0 / 1024 / 1024;
bool divisible(double dividend, double divisor) {
return std::fabs(std::fmod(dividend, divisor)) < EPSILON;
}

在某些情况下,我们不能使用std::fmod,例如在constexpr上下文中,因此我们也可以自己计算:

#include <cstdint>
constexpr bool divisible(double dividend, double divisor) {
double quotient = dividend / divisor;
double quotient_fraction = quotient - static_cast<intmax_t>(quotient);
return quotient_fraction > -EPSILON && quotient_fraction < EPSILON;
}

最新更新