Условие равенства для переменной с двойным циклом: неопределенное или неопределенное? - PullRequest
1 голос
/ 28 октября 2019

Я бы хотел разобраться с терминологией. Подумайте:

for (double d = 0.0; d != 1.0; d += 0.1)
    cout << d << " ";

Если я правильно понимаю, поскольку двойная арифметика неточна, этот цикл может быть либо конечным, либо бесконечным. Это считается неопределенным или неопределенным поведением?

1 Ответ

6 голосов
/ 28 октября 2019

Поведение вашей программы определена реализация : Разные реализации могут иметь разное поведение, но они должны это документировать. Это отличается от неопределенного поведения (не требуется документирования) и неопределенного поведения (все идет). См. Также Неопределенное, неопределенное и определяемое реализацией поведение .

Общая реализация double определяется IEEE754. Если за этим стандартом следует ваша реализация, то этот цикл всегда будет восстанавливать один и тот же вывод.

Ваш цикл бесконечен в IEEE754 - вы пропустите 1.0 и в конечном итоге d вырастет до такогоразмер, в котором добавление 0.1 запрещено;

...