Возможно, это глупый вопрос, но я никогда не думал об этом, пока меня не заставили совсем недавно.
Предположим, что программа инициализируется с точно таким же состоянием и не имеет неопределенного поведения на пути неинициализированных переменных. Состояния регистров на ЦП могут отличаться до выполнения кода. Предположим, что никакие внешние явления не вызывают уродливую переворот.
Будет ли одна и та же последовательность числовых вычислений всегда давать один и тот же результат (как, например, полное битовое представление значений типа double и float)? Другими словами, является ли числовая ошибка детерминированной?
РЕДАКТИРОВАТЬ: Я знаю, что адреса указателя могут каждый раз отличаться, но давайте отвлечем адреса указателя от использования в любых вычислениях.
Формально нет, но на практике в основном да. Поэтому люди были очень раздражены, когда ошибка в DLL приводила к тому, что другие программы демонстрировали невоспроизводимые результаты.
Особый случай, о котором я думал, был связан с DLL, которая была загружена в каждый процесс на компьютере. Я не помню точную причину, но я думаю, что это был какой-то редактор метода ввода (который часто используется для языков не ASCII). Эта конкретная DLL сделала несколько вычислений с плавающей запятой, и изменил режим округления с плавающей точкой!.
Других решений пока нет …