Y si realmente necesita infinity como int , escriba una clase contenedora que sobrecargue los operadores de comparación y tenga una variable booleana llamada "is_infinity".
@WTP Teniendo en cuenta que lo necesita para la implementación del algoritmo de Dijkstra, dudo que sea necesario. Pero es la opción más sensata de lo contrario.
Etienne de Martel
4
Agregué el comentario para futuros visitantes que no implementan el algoritmo de Dijkstra, pero lo necesitan para otra cosa. :)
Parece que tenemos un candidato para una insignia de oro aquí. :) +1 para los dos!
Mysticial
2
Tenga en cuenta que si usa la intsolución, debe tener mucho cuidado con la aritmética: agregar un número positivo a "infinito" producirá un resultado muy inesperado.
Lambda Fairy
67
Los enteros son finitos, por lo que, lamentablemente, no puede haberlo establecido en un verdadero infinito. Sin embargo, puede establecerlo en el valor máximo de un int, esto significaría que sería mayor o igual a cualquier otro int, es decir:
a>=b
siempre es cierto.
Harías esto por
#include<limits>//your code hereint 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 necesita un valor "infinito" verdadero, tendría que usar un doble o un flotante. Entonces puedes simplemente hacer esto
float a = std::numeric_limits<float>::infinity();
Aquí se pueden encontrar explicaciones adicionales de los límites numéricos.
¡Feliz codificación!
Nota: Como mencionó WTP, si es absolutamente necesario tener un int que sea "infinito", tendría que escribir una clase contenedora para un int y sobrecargar los operadores de comparación, aunque esto probablemente no sea necesario para la mayoría de los proyectos.
... y si desea usar max()o infinity()en una plantilla donde se desconoce el tipo numérico, deberá usar +/-infinity()iff std::numeric_limits<T>::has_infinityy de lo contrario min()ymax()
Ben Jackson
13
intes inherentemente finito; no hay valor que satisfaga sus requisitos.
Sin embargo, si está dispuesto a cambiar el tipo de b, puede hacerlo con anulaciones de operador:
float
s, que tiene un valor que representa infinito.Max Value
implementación del lenguaje.a>b
verificación :)Respuestas:
Los enteros son inherentemente finitos. Lo más cercano que puede obtener es estableciendo el valor máximo de
a
toint
:Cuál sería
2^31 - 1
(o2 147 483 647
) siint
tiene 32 bits de ancho en su implementación.Si realmente necesita infinito, use un tipo de número de punto flotante, como
float
odouble
. Luego puede obtener el infinito con:fuente
int
solución, debe tener mucho cuidado con la aritmética: agregar un número positivo a "infinito" producirá un resultado muy inesperado.Los enteros son finitos, por lo que, lamentablemente, no puede haberlo establecido en un verdadero infinito. Sin embargo, puede establecerlo en el valor máximo de un int, esto significaría que sería mayor o igual a cualquier otro int, es decir:
siempre es cierto.
Harías esto por
Esto normalmente será igual a 2,147,483,647
Si realmente necesita un valor "infinito" verdadero, tendría que usar un doble o un flotante. Entonces puedes simplemente hacer esto
Aquí se pueden encontrar explicaciones adicionales de los límites numéricos.
¡Feliz codificación!
Nota: Como mencionó WTP, si es absolutamente necesario tener un int que sea "infinito", tendría que escribir una clase contenedora para un int y sobrecargar los operadores de comparación, aunque esto probablemente no sea necesario para la mayoría de los proyectos.
fuente
max()
oinfinity()
en una plantilla donde se desconoce el tipo numérico, deberá usar+/-infinity()
iffstd::numeric_limits<T>::has_infinity
y de lo contrariomin()
ymax()
int
es inherentemente finito; no hay valor que satisfaga sus requisitos.Sin embargo, si está dispuesto a cambiar el tipo de
b
, puede hacerlo con anulaciones de operador:fuente
std::numeric_limits<float>::infinity()
.Este es un mensaje para mí en el futuro:
Solo usa:
(unsigned)!((int)0)
Crea el mayor número posible en cualquier máquina asignando todos los bits a unos (unos) y luego lo convierte en unsigned
Aun mejor
Y luego solo usa INF en tu código
fuente
#define INF ((unsigned) ~0)
ver aquí .También puede utilizar INT_MAX:
http://www.cplusplus.com/reference/climits/
es equivalente a usar numeric_limits.
fuente
valores int min y 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
supongo que podría establecer un igual a 9,223,372,036,854,775,807 pero tendría que ser un int64
si siempre quieres que a sea más rallado, ¿por qué necesitas comprobarlo? solo configúralo para que sea cierto siempre
fuente
cstdint
).int
y los tipos relacionados en C ++.