Сравните бесконечность с бесконечностью в C ++ - PullRequest
0 голосов
/ 15 октября 2018

Предположим, у меня есть две переменные, обе из которых установлены в бесконечность

double l = std::numeric_limits<double>::infinity();
double r = std::numeric_limits<double>::infinity();

В другой точке кода у меня есть сравнение этих двух переменных

if (l < r) {}

Является ли результатиз этого сравнения правильно определены в библиотеке?(В рамках логики моей программы я бы ожидал, что результат будет false.)

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

C ++ не требует реализации для поддержки бесконечности в ее типах с плавающей точкой.Однако, если реализация поддерживает бесконечность, мы можем ожидать, что infinity < infinity будет ложным.С ++ неявно предполагает нормальную математику - он не определяет математическое сложение, умножение, деление, косинус, логарифм и т. Д., Но просто предполагает, что математика является справочной информацией, известной читателю.

Математики различают различные типы бесконечностей, но C ++ не предусматривает этого;это обеспечивает только одну положительную бесконечность и одну отрицательную бесконечность.Таким образом, ясно, что они являются простыми расширениями действительных чисел.

0 голосов
/ 15 октября 2018

(В рамках логики моей программы я бы ожидал, что результат будет false.)

Согласно this :

В операциях сравнения положительная бесконечность больше, чем все значения, кроме самого себя и NaN

Так что вы действительно правы.

Обратите внимание, что это может быть недопустимо, если ваш компиляториспользует другой стандарт, чем IEEE 754, поэтому убедитесь, что std::numeric_limits<double>::is_iec559; возвращает true в случае сомнений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...