1

Я знаю, что не могу сравнивать два числа с плавающей точкой или двойные числа для абсолютного равенства на C++/C. Если по какой-то причине я пишу условие if, которое использует абсолютное равенство, гарантируется ли, что условие if вернет тот же результат на разные прогоны программы для одних и тех же данных? Или это чисто недетерминированно, и результат может меняться?Сравнение с плавающей точкой - результат между различными прогонами

ответ

1

Для того же скомпилированного двоичного файла и на том же ПК результаты должны быть одинаковыми. Если вы используете другой компилятор или другой компьютер, результаты могут отличаться.

+0

На другом компьютере вы имеете в виду другую архитектуру? –

+0

Да, я думаю, что это единственное, что здесь имеет значение. – schnaader

+0

Время от времени я получаю разные результаты по инверсии матрицы (менее значимый бит), выполняющий тот же исполняемый файл на одной машине. – peterdemin

0

У меня когда-то был единичный тест, который потерпел неудачу на машине с процессором Intel, но работал нормально на AMD. Вероятно, была какая-то разница в округлении, и тест без проблем попал в критерий прохождения/отказа.

Но я бы не поместил ваш код сверхкомплексными тестами всюду только из-за этого.

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