Mam to, int a
co musi być równe „nieskończoności”. Oznacza to, że jeśli
int b = anyValue;
a>b
jest zawsze prawdą.
Czy jest jakaś funkcja C ++, która mogłaby to umożliwić?
Max Value
implementację języka.
a>b
kontrolę :)
Mam to, int a
co musi być równe „nieskończoności”. Oznacza to, że jeśli
int b = anyValue;
a>b
jest zawsze prawdą.
Czy jest jakaś funkcja C ++, która mogłaby to umożliwić?
Max Value
implementację języka.
a>b
kontrolę :)
Odpowiedzi:
Liczby całkowite są z natury skończone. Najbliżej można dostać się poprzez ustawienie a
na int
„s wartości maksymalnej:
#include <limits>
// ...
int a = std::numeric_limits<int>::max();
Który byłby 2^31 - 1
(lub 2 147 483 647
) jeśli int
ma 32 bity szerokości w twojej implementacji.
Jeśli naprawdę potrzebujesz nieskończoności, użyj liczb zmiennoprzecinkowych, takich jak float
lub double
. Możesz wtedy uzyskać nieskończoność za pomocą:
double a = std::numeric_limits<double>::infinity();
int
rozwiązania, musisz bardzo uważać na arytmetykę: dodanie liczby dodatniej do „nieskończoności” da bardzo nieoczekiwany wynik.
Liczby całkowite są skończone, więc niestety nie możesz ustawić ich na prawdziwą nieskończoność. Jednak możesz ustawić ją na maksymalną wartość int, oznaczałoby to, że byłaby większa lub równa każdemu innemu int, tj .:
a>=b
jest zawsze prawdą.
Zrobiłbyś to przez
#include <limits>
//your code here
int a = std::numeric_limits<int>::max();
//go off and lead a happy and productive life
Zwykle będzie to 2 147 483 647
Jeśli naprawdę potrzebujesz prawdziwej „nieskończonej” wartości, musisz użyć double lub float. Następnie możesz to po prostu zrobić
float a = std::numeric_limits<float>::infinity();
Dodatkowe wyjaśnienia dotyczące limitów liczbowych można znaleźć tutaj
Miłego kodowania!
Uwaga: Jak wspomniał WTP, jeśli absolutnie konieczne jest posiadanie int, które jest „nieskończone”, musiałbyś napisać klasę opakowującą dla int i przeciążać operatory porównania, chociaż prawdopodobnie nie jest to konieczne w przypadku większości projektów.
max()
lub infinity()
w szablonie, w którym typ numeryczny jest nieznany, będziesz musiał użyć +/-infinity()
iff std::numeric_limits<T>::has_infinity
lub innego min()
imax()
int
jest z natury skończony; nie ma wartości, która spełniałaby Twoje wymagania.
Jeśli jednak chcesz zmienić typ b
, możesz to zrobić za pomocą zastąpień operatora:
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()
.
To jest wiadomość dla mnie na przyszłość:
Po prostu użyj: (unsigned)!((int)0)
Tworzy największą możliwą liczbę na dowolnej maszynie, przypisując wszystkie bity do 1 (jedynek), a następnie rzutuje ją na niepodpisane
Nawet lepiej
#define INF (unsigned)!((int)0)
A potem po prostu użyj INF w swoim kodzie
#define INF ((unsigned) ~0)
, spójrz tutaj .
Możesz także użyć INT_MAX:
http://www.cplusplus.com/reference/climits/
jest to równoważne użyciu numeric_limits.
wartości minimalne i maksymalne int
-2.147.483.648 / 2.147.483.647 Int 64-9.223.372.036.854.775.808 / 9.223.372.036.854.775807
myślę, że możesz ustawić a jako równe 9 223 372 036 854 775 807, ale musiałby to być int64
jeśli zawsze chcesz, aby a był tarty, to dlaczego musisz to sprawdzić? po prostu ustaw zawsze tak, aby było prawdziwe
cstdint
).
int
i powiązane typy w C ++.
float
s, które mają wartość reprezentującą nieskończoność.