У мене є int a
те, що повинно дорівнювати "нескінченності". Це означає, що якщо
int b = anyValue;
a>b
завжди правда.
Чи є якась функція C ++, яка могла б зробити це можливим?
Max Value
впровадження мови.
a>b
перевірку :)
У мене є int a
те, що повинно дорівнювати "нескінченності". Це означає, що якщо
int b = anyValue;
a>b
завжди правда.
Чи є якась функція C ++, яка могла б зробити це можливим?
Max Value
впровадження мови.
a>b
перевірку :)
Відповіді:
Цілі числа за своєю суттю є кінцевими. Найближчий ви можете отримати, встановивши 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
рішення, ви повинні бути дуже обережними з арифметикою: додавання додатного числа до "нескінченності" дасть дуже несподіваний результат.
Цілі ліки є кінцевими, тому, на жаль, ви не можете встановити його на справжню нескінченність. Однак ви можете встановити його до максимального значення 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
Якщо вам справді потрібне справжнє "нескінченне" значення, вам доведеться використовувати дубль або поплавок. Тоді ви можете просто зробити це
float a = std::numeric_limits<float>::infinity();
Додаткові пояснення числових меж можна знайти тут
Щасливе кодування!
Примітка. Як зазначалося в WTP, якщо абсолютно необхідно мати int, який є "нескінченним", вам доведеться написати клас обгортки для int і перевантажити оператори порівняння, хоча це, мабуть, не потрібно для більшості проектів.
max()
або infinity()
в шаблоні, де числовий тип невідомий, вам потрібно буде використовувати +/-infinity()
iff std::numeric_limits<T>::has_infinity
і інше, min()
іmax()
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()
.
Це повідомлення для мене в майбутньому:
Просто використовуйте: (unsigned)!((int)0)
Він створює максимально можливе число в будь-якій машині, присвоюючи всі біти 1s (одиниці), а потім передає їх без знака
Навіть краще
#define INF (unsigned)!((int)0)
А потім просто використовуйте INF у своєму коді
#define INF ((unsigned) ~0)
, дивіться тут .
Ви також можете використовувати INT_MAX:
http://www.cplusplus.com/reference/climits/
це рівнозначно використанню numeric_limits.
значення int min та max
Int -2,147,483,648 / 2,147,483,647 Int 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 ++.
float
s, які мають значення, що представляє нескінченність.