Является ли числовая ошибка воспроизводимой?

Возможно, это глупый вопрос, но я никогда не думал об этом, пока меня не заставили совсем недавно.

Предположим, что программа инициализируется с точно таким же состоянием и не имеет неопределенного поведения на пути неинициализированных переменных. Состояния регистров на ЦП могут отличаться до выполнения кода. Предположим, что никакие внешние явления не вызывают уродливую переворот.

Будет ли одна и та же последовательность числовых вычислений всегда давать один и тот же результат (как, например, полное битовое представление значений типа double и float)? Другими словами, является ли числовая ошибка детерминированной?

РЕДАКТИРОВАТЬ: Я знаю, что адреса указателя могут каждый раз отличаться, но давайте отвлечем адреса указателя от использования в любых вычислениях.

1

Решение

Формально нет, но на практике в основном да. Поэтому люди были очень раздражены, когда ошибка в DLL приводила к тому, что другие программы демонстрировали невоспроизводимые результаты.

Особый случай, о котором я думал, был связан с DLL, которая была загружена в каждый процесс на компьютере. Я не помню точную причину, но я думаю, что это был какой-то редактор метода ввода (который часто используется для языков не ASCII). Эта конкретная DLL сделала несколько вычислений с плавающей запятой, и изменил режим округления с плавающей точкой!.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]