Каково обоснование для всех сравнений, возвращающих ложь для значений NaN IEEE754?

Почему сравнения значений NaN ведут себя иначе, чем все другие значения? То есть все сравнения с операторами ==, <=,>=, <,> где одно или оба значения NaN возвращает false, в отличие от поведения всех других значений.

Я полагаю, это каким-то образом упрощает численные вычисления, но я не могне может найти явную причину, даже вКонспект лекций о состоянии IEEE 754 Каханом, который подробно обсуждает другие дизайнерские решения.

Такое отклоняющееся поведение вызывает проблемы при выполнении простой обработки данных. Например, при сортировке списка записей w.r.t. В некотором вещественном поле в программе на Си мне нужно написать дополнительный код для обработки NaN как максимального элемента, иначе алгоритм сортировки может запутаться.

Редактировать: Ответы до сих пор все утверждают, что сравнивать NaN бессмысленно.

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

Так что выбор возврата true или false для сравнений, на мой взгляд, произвольный, и для общей обработки данных было бы выгодно, если бы он подчинялся обычным законам (рефлексивность ==, трихотомия <, ==,>), чтобы структуры данных, основанные на этих законах, не были запутаны.

Так что я'Я спрашиваю о каком-то конкретном преимуществе нарушения этих законов, а не только философских рассуждениях.

Изменить 2: Я думаю, что теперь я понимаю, почему сделать NaN максимальным было бы плохой идеей, это могло бы испортить вычисление верхних пределов.

NaN! = NaN может быть желательно, чтобы избежать обнаружения сходимости в цикле, таких как

while (x != oldX) {
    oldX = x;
    x = better_approximation(x);
}

который, однако, лучше написать, сравнивая абсолютную разницу с небольшим пределом. Так что ИМХО это относительно слабый аргумент для нарушения рефлексивности в NaN.

Ответы на вопрос(13)

Ваш ответ на вопрос