У меня есть int a
, который должен быть равен "бесконечности". Это означает, что если
int b = anyValue;
a>b
всегда верно.
Есть ли какая-нибудь особенность C ++, которая могла бы сделать это возможным?
У меня есть int a
, который должен быть равен "бесконечности". Это означает, что если
int b = anyValue;
a>b
всегда верно.
Есть ли какая-нибудь особенность C ++, которая могла бы сделать это возможным?
Целые числа по своей природе конечны. Самое близкое, что вы можете получить, - это установить a
на максимальное значение int
:
#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
, вы должны быть очень осторожны с арифметикой: добавление положительного числа к бесконечности даст очень неожиданный результат.
- person Lambda Fairy; 01.08.2014
-std::numeric_limits<double>::infinity()
.
- person Etienne de Martel; 24.08.2018
Целые числа конечны, поэтому, к сожалению, вы не можете установить для них истинную бесконечность. Однако вы можете установить для него максимальное значение int, это будет означать, что оно будет больше или равно любому другому int, то есть:
a>=b
всегда правда.
Вы бы сделали это
#include <limits>
//your code here
int 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()
- person Ben Jackson; 01.01.2012
int
по своей природе конечен; нет ценности, которая бы удовлетворяла вашим требованиям.
Если вы хотите изменить тип b
, вы можете сделать это с помощью переопределения оператора:
class infinitytype {};
template<typename T>
bool operator>(const T &, const infinitytype &) {
return false;
}
template<typename T>
bool operator<(const T &, const infinitytype &) {
return true;
}
bool operator<(const infinitytype &, const infinitytype &) {
return false;
}
bool operator>(const infinitytype &, const infinitytype &) {
return false;
}
// add operator==, operator!=, operator>=, operator<=...
int main() {
std::cout << ( INT_MAX < infinitytype() ); // true
}
std::numeric_limits<float>::infinity()
.
- person Xeo; 01.01.2012
Это сообщение для меня в будущем:
Просто используйте: (unsigned)!((int)0)
Он создает максимально возможное число на любой машине, присваивая все биты единицам (единицам), а затем преобразует его в беззнаковый
Даже лучше
#define INF (unsigned)!((int)0)
А затем просто используйте INF в своем коде
Вы также можете использовать 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
).
- person Etienne de Martel; 01.01.2012
int
и связанных типов в C ++.
- person Mike Samuel; 01.01.2012
float
s, значение которых представляет бесконечность. - person Xeo   schedule 01.01.2012Max Value
реализация языка. - person keyboardP   schedule 01.01.2012float
- не решение. Легко представить себе тип данных, значениями которого являются-Infinity
,INT_MIN
, ..., 0, ...,INT_MAX
,+Infinity
. В C ++ такого типа просто нет. - person Keith Thompson   schedule 01.01.2012a>b
проверку :) - person keyboardP   schedule 01.01.2012std::numeric_limits<int>::min() - 1 == std::numeric_limits<int>::max()
в большинстве реализаций (технически это не определено)? Лично я бы предпочел, чтобы оно было равноstd::numeric_limits<int>::minusinfinity()
и испортило остальную часть выражения. - person Matthieu M.   schedule 01.01.2012a = INT_MAX;
, верно? Или вы ссылаетесь на другую функцию? - person Callat   schedule 20.04.2016