Mam to, int aco 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 Valueimplementację języka.
a>bkontrolę :)
Mam to, int aco 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 Valueimplementację języka.
a>bkontrolę :)
Odpowiedzi:
Liczby całkowite są z natury skończone. Najbliżej można dostać się poprzez ustawienie ana 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 intma 32 bity szerokości w twojej implementacji.
Jeśli naprawdę potrzebujesz nieskończoności, użyj liczb zmiennoprzecinkowych, takich jak floatlub double. Możesz wtedy uzyskać nieskończoność za pomocą:
double a = std::numeric_limits<double>::infinity();
introzwią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_infinitylub innego min()imax()
intjest 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).
inti powiązane typy w C ++.
floats, które mają wartość reprezentującą nieskończoność.