Возможно ли, что правильный алгоритм дает неправильный результат?
Возможно ли, что компьютер дает неправильный результат из-за аппаратной ошибки? Например, если я скажу процессору вычислять 6 раз 9 (оба целых числа) много раз, все вычисления дадут правильный ответ? Если есть вероятность того, что некоторые расчеты пойдут неправильно, почему это так, и существует ли какой-либо механизм, блокирующий неправильный ответ внутри ЦП?
1 ответ
Есть несколько возможностей:
Эксплуатация процессора за пределами спецификации может привести к нестабильному поведению (например, слишком много тепла, слишком много напряжения)
Если прерывание срабатывает в середине неатомарной операции, и прерывание изменяет результат, может произойти странное поведение. (Например: если вы пытаетесь выполнить 16-битную операцию на 8-битном процессоре. Возможно, вы рассчитываете
A * B
, но у вас есть таймер, который запускает и изменяет значениеA
на полпути через умножение. Это действительно считается программной ошибкой, а не ошибкой.Там всегда космические лучи. Чипы в наши дни настолько малы, что вы не можете винить их в этом, но это проблема, если у вас есть многолетняя автономная система.
Что касается предотвращения сбоев, во время Space Race компьютер запуска использовал логику с тройным резервированием для проверки каждого вычисления. STMicroelectronics имеет линейку отказоустойчивых двухъядерных микроконтроллеров, которые работают на обоих ядрах с одинаковым кодом, и в случае несоответствия одного из ядер возникает неисправность.