numeric_limits c++ infinity

numeric_limits - Establecer un int para Infinity en C++



infinity c++ int (6)

Este es un mensaje para mí en el futuro:

Solo use: (sin firmar)! ((Int) 0)

Crea el número más grande posible en cualquier máquina asignando todos los bits a 1s (unos) y luego lo convierte en unsigned

Aun mejor

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

Y solo usa INF abajo

Tengo un int a que tiene que ser igual a "infinito". Esto significa que si

int b = anyValue;

a>b es siempre cierto.

¿Hay alguna característica de C ++ que pueda hacer esto posible?


Los enteros son finitos, por lo que lamentablemente no puedes haberlo configurado en un verdadero infinito. Sin embargo, puede establecerlo en el valor máximo de un int, esto significa que sería mayor o igual a cualquier otro int, es decir:

a>=b

siempre es verdad

Lo harías por

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

Esto normalmente será igual a 2,147,483,647

Si realmente necesitas un verdadero valor "infinito", deberías usar un doble o un flotador. Entonces puedes simplemente hacer esto

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

Explicaciones adicionales de los límites numéricos se pueden encontrar here

Feliz Codificación!

Nota: Como se mencionó WTP, si es absolutamente necesario tener un int que sea "infinito", tendría que escribir una clase contenedora para un int y sobrecargar a los operadores de comparación, aunque esto probablemente no sea necesario para la mayoría de los proyectos.


Los enteros son inherentemente finitos. Lo más cerca que puede obtener es establecer a valor máximo de int .

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

Que sería 2^31 - 1 (o 2 147 483 647 ) si int tiene 32 bits de ancho en su implementación.

Si realmente necesita el infinito, use un tipo de número de punto flotante, como float o double . Entonces puede obtener el infinito con:

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



int valores mínimos y máximos

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

Supongo que podría establecer una igual a 9,223,372,036,854,775,807, pero tendría que ser un int64

si siempre quieres un rallador que b ¿por qué necesitas comprobarlo? solo configúralo para que sea verdadero siempre


int es inherentemente finito; no hay ningún valor que satisfaga sus requisitos.

Sin embargo, si está dispuesto a cambiar el tipo de b , puede hacerlo con las anulaciones del operador:

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 }