C++ 找到循环系统中两个值之间最小差异的最佳方法?
以时间为例: 如果我们用12小时的时钟,我们会得到以下结果C++ 找到循环系统中两个值之间最小差异的最佳方法?,c++,algorithm,performance,C++,Algorithm,Performance,以时间为例: 如果我们用12小时的时钟,我们会得到以下结果 从1到5=4 从5到1=4 从11到1=2 从1到11=2 最有效的方法是什么 假设值是双倍的。以mod为周期,并且假设两个输入值都小于mod,您可以使用: int x = std::min((mod + a - b) % mod, (mod - a + b) % mod); 不使用模运算晶圆厂很便宜 double closest_dist_in_cycle(double a, double b, double cycle){
- 从1到5=4
- 从5到1=4
- 从11到1=2
- 从1到11=2
假设值是双倍的。以
mod
为周期,并且假设两个输入值都小于mod
,您可以使用:
int x = std::min((mod + a - b) % mod, (mod - a + b) % mod);
不使用模运算<代码>晶圆厂很便宜
double closest_dist_in_cycle(double a, double b, double cycle){
double result = std::fabs(a - b);
return std::min(result, cycle - result);
}
参考资料:
您尝试了什么?有两个可能的答案,选择较低的一个。。。问题是什么?此线程可能会有所帮助:
min((12+a-b)%12,(12-a+b)%12)
从5到1=4。你能详细说明一下吗?我刚刚注意到要求假设值是双倍的,这当然使这个解决方案不相关,因为模运算符%
仅为整数定义。不确定循环系统在非整数上的定义到底是什么…OP想要a
和b
双倍
@idclev463035818:是的,我刚刚注意到,请看我上面的评论。是的,发布的时间几乎相同。这只是一个小小的变化fmod
取代%
希望看到一种更有效的方法