E se você realmente precisar do infinito como um int , escreva uma classe wrapper que sobrecarregue os operadores de comparação e tenha uma variável booleana chamada "is_infinity".
@WTP Considerando que ele precisa disso para a implementação de um algoritmo de Dijkstra, duvido que seja necessário. Mas é a escolha mais sensata de outra forma.
Etienne de Martel
4
Eu adicionei o comentário para futuros visitantes que não implementam o algoritmo de Dijkstra, mas precisam dele para outra coisa. :)
Parece que temos um candidato a um distintivo dourado aqui. :) +1 para vocês dois!
Mysticial 01 de
2
Observe que se você usar a intsolução, deve ter muito cuidado com a aritmética: adicionar um número positivo ao "infinito" produzirá um resultado muito inesperado.
Lambda Fairy
67
Os inteiros são finitos, portanto, infelizmente, você não pode defini-los como um infinito verdadeiro. No entanto, você pode defini-lo com o valor máximo de um int, isso significaria que seria maior ou igual a qualquer outro int, ou seja:
a>=b
é sempre verdade.
Você faria isso por
#include<limits>//your code hereint a = std::numeric_limits<int>::max();//go off and lead a happy and productive life
Isso normalmente será igual a 2.147.483.647
Se você realmente precisa de um valor "infinito" verdadeiro, terá que usar um double ou um float. Então você pode simplesmente fazer isso
float a = std::numeric_limits<float>::infinity();
Explicações adicionais sobre os limites numéricos podem ser encontradas aqui
Happy Coding!
Nota: Como WTP mencionou, se for absolutamente necessário ter um int que seja "infinito", você teria que escrever uma classe wrapper para um int e sobrecarregar os operadores de comparação, embora isso provavelmente não seja necessário para a maioria dos projetos.
... e se você quiser usar max()ou infinity()em um modelo onde o tipo numérico é desconhecido, você precisará usar +/-infinity()iff std::numeric_limits<T>::has_infinitye de outra forma min()emax()
Ben Jackson
13
inté inerentemente finito; não há valor que atenda às suas necessidades.
Se você deseja alterar o tipo de b, no entanto, pode fazer isso com as substituições de operador:
float
s, que têm um valor que representa o infinito.Max Value
implementação da linguagem.a>b
verificação :)Respostas:
Os inteiros são inerentemente finitos. O mais próximo que você pode obter é através da criação
a
deint
's valor máximo:Que seria
2^31 - 1
(ou2 147 483 647
) se tivesseint
32 bits de largura em sua implementação.Se você realmente precisa do infinito, use um tipo de número de ponto flutuante, como
float
oudouble
. Você pode obter o infinito com:fonte
int
solução, deve ter muito cuidado com a aritmética: adicionar um número positivo ao "infinito" produzirá um resultado muito inesperado.Os inteiros são finitos, portanto, infelizmente, você não pode defini-los como um infinito verdadeiro. No entanto, você pode defini-lo com o valor máximo de um int, isso significaria que seria maior ou igual a qualquer outro int, ou seja:
é sempre verdade.
Você faria isso por
Isso normalmente será igual a 2.147.483.647
Se você realmente precisa de um valor "infinito" verdadeiro, terá que usar um double ou um float. Então você pode simplesmente fazer isso
Explicações adicionais sobre os limites numéricos podem ser encontradas aqui
Happy Coding!
Nota: Como WTP mencionou, se for absolutamente necessário ter um int que seja "infinito", você teria que escrever uma classe wrapper para um int e sobrecarregar os operadores de comparação, embora isso provavelmente não seja necessário para a maioria dos projetos.
fonte
max()
ouinfinity()
em um modelo onde o tipo numérico é desconhecido, você precisará usar+/-infinity()
iffstd::numeric_limits<T>::has_infinity
e de outra formamin()
emax()
int
é inerentemente finito; não há valor que atenda às suas necessidades.Se você deseja alterar o tipo de
b
, no entanto, pode fazer isso com as substituições de operador:fonte
std::numeric_limits<float>::infinity()
.Esta é uma mensagem para mim no futuro:
Apenas use:
(unsigned)!((int)0)
Ele cria o maior número possível em qualquer máquina, atribuindo todos os bits a 1s (uns) e, em seguida, converte-o em sem sinal
Melhor ainda
E então é só usar INF em seu código
fonte
#define INF ((unsigned) ~0)
, veja aqui .Você também pode usar INT_MAX:
http://www.cplusplus.com/reference/climits/
é equivalente a usar numeric_limits.
fonte
valores mínimos e máximos int
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
eu acho que você poderia definir a igual a 9.223.372.036.854.775.807, mas seria necessário ser um int64
se você sempre quer a ser maior que b, por que você precisa verificar? apenas configure para ser verdade sempre
fonte
cstdint
).int
e os tipos relacionados em C ++.