Ответ 1
В отличие от реляционных операторов, эти макросы действительно возвращают только логическое значение и никогда не поднимают исключение с плавающей запятой.
Короче: вам нужно иметь дело только с true
/false
и больше ничего.
ссылки:
Описание Open Group (а не стандарт C или С++, но очень актуальный в мире Unix/Linux и почти всегда аналогичный стандартам):
- http://pubs.opengroup.org/onlinepubs/009695399/functions/islessgreater.html
- http://pubs.opengroup.org/onlinepubs/009695399/functions/isgreater.html
- http://pubs.opengroup.org/onlinepubs/009695399/functions/isgreaterequal.html
- http://pubs.opengroup.org/onlinepubs/009695399/functions/isless.html
- http://pubs.opengroup.org/onlinepubs/009695399/functions/islessequal.html
- http://pubs.opengroup.org/onlinepubs/009695399/functions/islessgreater.html
- http://pubs.opengroup.org/onlinepubs/009695399/functions/isunordered.html
Стандарт С++:
C Library [c.math]:
Функции классификации/сравнения ведут себя так же, как макросы C с соответствующими именами, определенными в 7.12.3, макросами классификации и 7.12.14, макросами сравнения в стандарте C. Каждая функция перегружена для трех типов с плавающей точкой, как показано ниже [...]
C стандарт:
7.12.14 Макросы сравнения
[...] Для любой упорядоченной пары числовых значений точно одна из отношения - меньше, больше и равно - верно. Реляционные операторы могут поднять '' Недопустимое исключение с плавающей запятой, когда значения аргумента являются значениями NaN. Для NaN и числовое значение или два NaN, только неупорядоченное отношение истинно. Следующие подпункты предоставляют макросы, которые являются тихими (не с плавающей точкой исключением) версиями реляционных операторов и другими макросами сравнения, которые облегчают написание эффективного кода, который учитывает NaN, не перенося "недопустимое исключение с плавающей точкой" . В синоптики в этом подпункте, real-floating указывает, что аргумент должен быть выражение реального плавающего типа.