c++ - 如何检查两个双精度数的除法是否为整数?
问题描述
我有两个任意的双打。只有当一个双精度除以另一个双精度是整数时,代码才应该继续。所以我不能真正将结果转换为双倍。我可以做一个正常的双除法,然后检查结果是否在一个指定整数的小范围内,但这看起来很混乱。
有人知道更好的解决方案吗?
谢谢
解决方案
要测试一个整数是否可以被另一个整数整除,您可以使用std::fmod
. std::fmod
返回除法的余数。如果余数为零,则这些数必须能整除。
#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;
}
推荐阅读
- vue.js - 在创建它的同一模块中使用 getter
- javascript - 如果单击按钮,下拉列表选项会更改(VueJS 和 Laravel 6)
- c# - DDD:一个存储库可以访问另一个存储库吗?
- angular - Angular - 导航时未定义的firebase用户ID,刷新后返回
- visual-studio-code - 是否有 vscode 启动完成事件或文件夹打开事件?
- html - onClick Google 脚本不适用于 HTML 表单
- python - 在 SQLAlchemy 中连接表的目的
- mysql - 我可以在 SQL 中使用 UNION 子句的查询中添加 ORDER BY 子句吗?
- r - R data.table 用 SD 排序
- ios - 如何在 React Native 中使用委托?