c++ - 有没有更有效的方法来包装浮点数?
问题描述
我一直在寻找有关如何在两个数字之间包装浮点数的示例,类似于如何使用模数处理整数。我发现的示例涉及使用 fmod 来查找小数点后的余数,假设它是一个圆圈并进行基于 pi 的数学运算,以及其他一些并不能完全满足我需要的事情。最后,我只是写了这个:
float fwrap(float x, float a0, float a1)
{
float mx = max(a0, a1);
float mn = min(a0, a1);
float nw = x;
while(nw < mn) nw += mx - mn;
while(nw > mx) nw -= mx - mn;
};
它有效,但我确定如果原始值离范围太远,它会慢慢思考,那么有没有更快的方法来做到这一点而不涉及循环?
我需要做的就是在超出范围时将一个数字包装在一个范围内,例如,如果a0
是 10 并且a1
是 20,那么如果x
是 25,它应该返回 15,但它也应该与浮点数一起使用,所以如果x
是 8.5,它应该返回 18.5。
解决方案
有没有更有效的方法来包装浮点数?
使用fmod()
家庭。
#include <float.h>
float fwrap_alternate(float x, float min, float max) {
if (min > max)
return fwrap_alternative(x, max, min);
return (x >= 0 ? min : max) + fmodf(x, max - min);
}
推荐阅读
- javascript - Vue修改DOM时如何调用函数?
- json - Flutter:setState 在第一次尝试时工作,但在响应 = 等待后没有工作
- pandas - 如何编写与 cutoff_time 一起使用的 seed_features
- vba - 在 MS Project 中使用 VBA 更改字段中的值
- python - 如何以“2019 年 8 月 21 日星期三 8:13 PM”格式打印日期时间?
- python - 更新 - 在找到标准后丢弃行时在熊猫中分组数据框
- angular - 异步管道不适用于相同的 observable
- javascript - PHP/AJAX:在下拉列表中选择数据后,HTML 表中的数据无法很好地显示
- php - 在创建自定义 WPForms 智能标签功能时在 functions.php 中使用自定义帖子类型标题
- jenkins - 如何在 Jenkins 构建计划中添加 ExtendedChoiceParameter?