检测循环序列中跳过值的快速轻量级方法



我有一个值,随着时间的推移,它从1增加到6,然后返回到1。因此,在几个帧中,可以看到的序列是:

1, 2, 3, 4, 5, 6, 1, 2, 3, 4...

如果硬件设备有缺陷,其中一个数字可能无法正确读取,因此序列可能如下所示:

1, 2, 6, 4, 5, 6, 1, 2, 6, 4...

检测这种不一致性的快速、简短的方法是什么

注:

  • 这是为硬实时环境设计的
  • 我目前的方法是检查每一帧的每个新值与上一个值的差值是否不大于1,然后1和6之间的差值有一个特殊情况,允许为5
  • 我想知道是否有一个简单的算法或技巧来解决这个问题
  • 如果顺序相反,则该顺序也是有效的,例如:6, 5, 4, 3, 2, 1, 6, 5, 4, 3....

您可以使用模运算符:

(current_value - previous_value + 6) mod 6 == 1

+6用于确保mod的参数为正。不同的语言对待负值的方式不同,但如果-5 mod 6在您的语言中计算为1,则可以省略+6

最新更新