2015-02-18 2 views
1

У меня есть одно значение, что, с течением времени, возрастает от 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
  • Мне интересно, есть ли простой алгоритм или трюк для решения этой проблемы
  • s equence также справедливо, если она находится в обратном направлении, например .: 6, 5, 4, 3, 2, 1, 6, 5, 4, 3....
+0

Что случилось с вашим нынешним подходом? Разве это не достаточно быстро? Это ненадежно? Или вы просто хотите сделать вещи «красивее»? – amit

+0

Кроме того, если обнаружен дефект - вы его исправите? Другими словами, при чтении n-го значения - можете ли вы предположить, что первые значения n-1 являются «правильными»? – amit

+0

Более простой подход, возможно, состоял в том, чтобы посмотреть на первое значение, а затем мы знаем, каким будет цикл. Поэтому вам просто нужно проверить, соответствует ли число «прогнозируемому» числу. Если нет, у вас есть разрыв цикла. –

ответ

1

Вы можете использовать оператор по модулю:

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

+6 является то, чтобы обеспечить положительный аргумент mod. Различные языки относятся к отрицательным значениям по-разному, но если -5 mod 6 оценивает 1 в вашем, вы можете опустить +6.

+1

Это выглядит элегантно, но я не вижу, как это может быть быстрее предлагаемого решения OP. –

+0

@VivekPradhan OP упоминает, что их подход кажется неуклюжим. –

+0

@JanneKarila, мои извинения, это прекрасно работает, если последовательность идет вперед не тогда, когда она идет назад. Вероятно, это моя вина, потому что я забыл упомянуть об этом, когда я впервые написал вопрос. Тем не менее я заметил, что для форвардных последовательностей это всегда == 1, а для обратного - всегда == 5, что может быть хорошим решением. Мне все еще нужно проверить это. – sydan

Смежные вопросы