2016-06-21 6 views
1

Я отлаживаю программу на C++. Существует переменная x типа double, gdb выводит ее значение как inf. Тем не менее, следующее выражение возвращает false, даже если значение x не изменилосьЧто такое inf в gdb

x == std::numeric_limits<double>::max()

Когда GDB говорит inf, это не означает, что максимальное возможное значение для данного типа (двойные)? Если нет, то что это значит?

ответ

3

Это означает, что x == std::numeric_limits<double>::infinity().

Реализация с плавающей запятой не обязательно должны поддерживать бесконечность, но общий - IEEE754 - делает.

Начиная с C++ 11, вы можете использовать std::isinf(x), чтобы проверить, является ли число с плавающей точкой бесконечным.

3

Нет, бесконечность не является максимальным значением; в этом смысле это вовсе не «ценность».

Бесконечность, как и NaN, является «особым значением», которое могут принимать ваши номера с плавающей запятой IEEE754. Оба из них обладают необычными свойствами (например, NaN! = NaN) и не сидят на числовой строке в том, что в остальном представляет собой числовой диапазон выбранного вами типа с плавающей запятой.

Хотя 1.79769e + 308 (std::numeric_limits<double>::max() на моей системе) очень большое количество, это long путь от бесконечности. Каждое потенциальное значение между ними (и есть буквально бесконечность их) не может быть представлено в этом типе. Функции «min» и «max» не были бы полезны в отношении числовой области double, если они просто вернули -inf и inf.

+0

Я уверен, что + INF и -INF сидят на числовой строке. В частности, они сидят в обоих концах. Более формально обе бесконечности упорядочены относительно конечных чисел. – MSalters

+0

Кроме того, «каждое потенциальное значение между 1,79E308 и + INF (и буквально бесконечность их)» немного вводит в заблуждение. Существует ровно столько рациональных чисел между 1.0 и 2.0, либо между 0.01 и 0.02, или pi и e. Я признаю, что математика может быть довольно противоречивой. – MSalters

+1

Определение этого * вида * бесконечности, которое я нахожу особенно полезным, - это число x, которое больше y для любого значения y. – Bathsheba