C++ 找到循环系统中两个值之间最小差异的最佳方法?

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){

以时间为例:

如果我们用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){
    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
取代
%
希望看到一种更有效的方法