Een int instellen op Infinity in C++

Ik heb een int adie gelijk moet zijn aan “oneindig”. Dit betekent dat als

int b = anyValue;

a>bis altijd waar.

Is er een functie van C++ die dit mogelijk maakt?


Antwoord 1, autoriteit 100%

Gehele getallen zijn inherent eindig. U kunt het dichtst in de buurt komen door ain te stellen op de maximale waarde van int:

#include <limits>
// ...
int a = std::numeric_limits<int>::max();

Dat zou 2^31 - 1(of 2 147 483 647) zijn als int32 bits breed is in uw implementatie.

Als je echtoneindig nodig hebt, gebruik dan een getaltype met drijvende komma, zoals floatof double. Je kunt dan oneindig krijgen met:

double a = std::numeric_limits<double>::infinity();

Antwoord 2, autoriteit 49%

Gehele getallen zijn eindig, dus je kunt het helaas niet op echt oneindig hebben ingesteld.
U kunt het echter instellen op de maximale waarde van een int, dit zou betekenen dat deze groter of gelijk is aan elke andere int, dat wil zeggen:

a>=b

is altijd waar.

U zou dit doen door

#include <limits>
//your code here
int a = std::numeric_limits<int>::max();
//go off and lead a happy and productive life

Dit is normaal gesproken gelijk aan 2.147.483.647

Als je echt een echte “oneindige” waarde nodig hebt, zou je een double of een float moeten gebruiken. Dan kunt u dit eenvoudig doen

float a = std::numeric_limits<float>::infinity();

Aanvullende uitleg van numerieke limieten vindt u hier

Veel plezier met coderen!

Opmerking: zoals WTP al zei, als het absoluut noodzakelijk is om een int te hebben die “oneindig” is, zou je een wrapper-klasse voor een int moeten schrijven en de vergelijkingsoperatoren moeten overbelasten, hoewel dit waarschijnlijk niet nodig is voor de meeste projecten.


Antwoord 3, autoriteit 9%

intis inherent eindig; er is geen waarde die aan uw eisen voldoet.

Als u echter bereid bent het type bte wijzigen, kunt u dit doen met operatoroverschrijvingen:

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
}

Antwoord 4, autoriteit 5%

Dit is een bericht voor mij in de toekomst:

Gebruik gewoon: (unsigned)!((int)0)

Het creëert het grootst mogelijke getal in elke machine door alle bits toe te wijzen aan enen (enen) en vervolgens te casten naar niet-ondertekend

Nog beter

#define INF (unsigned)!((int)0)

En gebruik dan gewoon INF in je code


Antwoord 5, Autoriteit 4%

U kunt ook int_max gebruiken:

http://www.cplusplus.com/reference/climits/

Het is equivalent aan het gebruik van Numeric_Limits.


Antwoord 6

INT MIN EN MAX-waarden

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

Ik denk dat je een tot gelijke 9.223.375.036.854.775.807 zou kunnen instellen, maar het zou een int64

moeten zijn

Als u altijd wilt om rasp te zijn, waarom moet u het controleren? Zet het gewoon om altijd waar te zijn

Other episodes