Вы можете просто использовать floats, значение которых представляет бесконечность.
Xeo
1
@jozefg - Хорошо, значит, пользователю нужна не проверка, а Max Valueреализация языка.
keyboardP
4
@jozefg Ха, я подумал, что вы собираетесь реализовать A *. Я был так близок!
Этьен де Мартель
2
@jozefg - В этом есть смысл. Я подумал, что OP действительно хотел провести a>bпроверку :)
keyboardP
1
@Hikari: Нет, я говорю, что нет способа представить бесконечность целым типом. Вы можете создать класс с перегруженными операторами.
Кейт Томпсон,
Ответы:
131
Целые числа по своей природе конечны. Ближайший вы можете получить, установив aв int«s максимального значения:
#include<limits>// ...int a = std::numeric_limits<int>::max();
Что было бы 2^31 - 1(или 2 147 483 647) если бы intв вашей реализации было 32 бита.
Если вам действительно нужна бесконечность, используйте тип числа с плавающей запятой, например floatили double. Затем вы можете получить бесконечность с помощью:
double a = std::numeric_limits<double>::infinity();
А если вам действительно нужна бесконечность как int , напишите класс-оболочку, который перегружает операторы сравнения и имеет логическую переменную с именем is_infinity.
@WTP Учитывая, что ему это нужно для реализации алгоритма Дейкстры, я сомневаюсь, что это будет необходимо. Но в остальном это наиболее разумный выбор.
Этьен де Мартель
4
Я добавил комментарий для будущих посетителей, которые не реализуют алгоритм Дейкстры, но нуждаются в нем для чего-то другого. :)
Похоже, у нас здесь есть кандидат на золотой значок. :) +1 для вас обоих!
Mysticial
2
Обратите внимание: если вы используете intрешение, вы должны быть очень осторожны с арифметикой: добавление положительного числа к «бесконечности» даст очень неожиданный результат.
Лямбда-Фея
67
Целые числа конечны, поэтому, к сожалению, вы не можете установить для них истинную бесконечность. Однако вы можете установить для него максимальное значение int, это будет означать, что оно будет больше или равно любому другому int, то есть:
a>=b
всегда правда.
Вы бы сделали это
#include<limits>//your code hereint a = std::numeric_limits<int>::max();//go off and lead a happy and productive life
Обычно это 2 147 483 647
Если вам действительно нужно истинное «бесконечное» значение, вам придется использовать double или float. Тогда вы можете просто сделать это
float a = std::numeric_limits<float>::infinity();
Дополнительные объяснения числовых ограничений можно найти здесь
Удачного кодирования!
Примечание. Как упоминалось в WTP, если абсолютно необходимо иметь "бесконечное" int, вам придется написать класс-оболочку для int и перегрузить операторы сравнения, хотя это, вероятно, не обязательно для большинства проектов.
... и если вы хотите использовать max()или infinity()в шаблоне, где числовой тип неизвестен, вам нужно будет использовать +/-infinity()iff, std::numeric_limits<T>::has_infinityиначе min()иmax()
Бен Джексон
13
intпо своей сути конечно; нет значения, которое удовлетворяет вашим требованиям.
Однако если вы хотите изменить тип b, вы можете сделать это с помощью переопределения оператора:
float
s, значение которых представляет бесконечность.Max Value
реализация языка.a>b
проверку :)Ответы:
Целые числа по своей природе конечны. Ближайший вы можете получить, установив
a
вint
«s максимального значения:Что было бы
2^31 - 1
(или2 147 483 647
) если быint
в вашей реализации было 32 бита.Если вам действительно нужна бесконечность, используйте тип числа с плавающей запятой, например
float
илиdouble
. Затем вы можете получить бесконечность с помощью:источник
int
решение, вы должны быть очень осторожны с арифметикой: добавление положительного числа к «бесконечности» даст очень неожиданный результат.Целые числа конечны, поэтому, к сожалению, вы не можете установить для них истинную бесконечность. Однако вы можете установить для него максимальное значение int, это будет означать, что оно будет больше или равно любому другому int, то есть:
всегда правда.
Вы бы сделали это
Обычно это 2 147 483 647
Если вам действительно нужно истинное «бесконечное» значение, вам придется использовать double или float. Тогда вы можете просто сделать это
Дополнительные объяснения числовых ограничений можно найти здесь
Удачного кодирования!
Примечание. Как упоминалось в WTP, если абсолютно необходимо иметь "бесконечное" int, вам придется написать класс-оболочку для int и перегрузить операторы сравнения, хотя это, вероятно, не обязательно для большинства проектов.
источник
max()
илиinfinity()
в шаблоне, где числовой тип неизвестен, вам нужно будет использовать+/-infinity()
iff,std::numeric_limits<T>::has_infinity
иначеmin()
иmax()
int
по своей сути конечно; нет значения, которое удовлетворяет вашим требованиям.Однако если вы хотите изменить тип
b
, вы можете сделать это с помощью переопределения оператора:источник
std::numeric_limits<float>::infinity()
.Это сообщение для меня в будущем:
Просто используйте:
(unsigned)!((int)0)
Он создает максимально возможное число на любой машине, присваивая все биты единицам (единицам), а затем преобразует его в беззнаковый
Даже лучше
А затем просто используйте INF в своем коде
источник
#define INF ((unsigned) ~0)
, смотрите здесь .Вы также можете использовать INT_MAX:
http://www.cplusplus.com/reference/climits/
это эквивалентно использованию numeric_limits.
источник
int min и max значения
Инт -2,147,483,648 / 2,147,483,647 Инт 64-9,223,372,036,854,775,808 / 9,223,372,036,854,775,807
я думаю, вы могли бы установить равным 9,223,372,036,854,775,807, но это должно быть int64
если ты всегда хочешь, чтобы а было больше, то б зачем тебе это проверять? просто сделай так, чтобы это всегда было правдой
источник
cstdint
).int
и связанные с ними типы в C ++.