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();
También puedes usar INT_MAX:
http://www.cplusplus.com/reference/climits/
es equivalente a usar numeric_limits.
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
}