O que esses valores de ponto flutuante de três especiais dizer: infinito positivo, negativo infinito, NaN?

StackOverflow https://stackoverflow.com/questions/1007586

Pergunta

Como podemos usá-los em nossos códigos, e que fará com NaN (não um número)?

Foi útil?

Solução

Este pode ser uma referência boa se você quiser saber mais sobre flutuante números de ponto em Java.

Positive Infinito é um número positivo tão grande que não pode ser representado normalmente. Infinito negativo é um número negativo tão grande que não pode ser representado normalmente. meios nan "não é um número" e resulta de uma operação matemática que não rende um número- como dividir 0 por 0.

Em Java, o dobro e flutuar aulas ambos têm constantes para representar todos os três casos. Eles são POSITIVE_INFINITY, NEGATIVE_INFINITY, e NaN.

Além disso, considere o seguinte:

double a = Math.pow(10, 600) - Math.pow(10, 600); //==NaN

Matematicamente, todo mundo pode ver que é 0. Mas para a máquina, é um "Infinito" - "Infinito" (de mesmo valor), que é de fato NaN.

Outras dicas

  • positivo significa infinito indo ao infinito no sentido positivo -. Entrando em valores que são maiores em magnitude no sentido positivo
  • meio infinito negativo vai para o infinito no sentido negativo -. Entrando em valores que são maiores em magnitude na direção negativa
  • Not-a-número (NaN) é algo que é indefinido, como o resultado de 0/0.

E as constantes a partir da especificação do Float classe:

Mais informação pode ser encontrada no IEEE-754 página na Wikipedia .

Aqui está um pequeno programa para ilustrar as três constantes:

System.out.println(0f / 0f);
System.out.println(1f / 0f);
System.out.println(-1f / 0f);

Output:

NaN
Infinity
-Infinity
  • 1/0 resultará em infinito positivo.
  • 0/0 resultará em Nan. Você pode usar NaN como qualquer outro número, por exemplo: NaN + NaN = NaN, NaN + 2.0 = NaN
  • -1/0 resultará em infinito negativo.

Infinito (em Java) significa que o resultado de uma operação vai ser uma extremamente grande positivo tal ou número negativo que não pode ser representado normalmente.

A idéia é representar números especiais que podem surgir naturalmente de operações em números "normais". Você podia ver o infinito (tanto positivos como negativos) como "estouro" da representação de ponto flutuante, a idéia é que em pelo menos algumas condições, tendo tal valor retornado por uma função ainda dá resultado significativo. Eles ainda têm algumas propriedades de ordenação, por exemplo (para que não estrague operações de classificação, por exemplo).

Nan é muito particular: se x é Nan, x == x é falso (que é na verdade uma forma de teste para nan, pelo menos em C, novamente). Isso pode ser um pouco confuso se você não está acostumado a peculiaridades de ponto flutuante. A menos que você faz computação científica, eu diria que ter Nan retornado por uma operação é um erro, pelo menos na maioria dos casos que vêm à mente. Nan pode vir para várias operações: 0/0, inf - inf, inf / inf, 0 * inf. não Nan não tem qualquer propriedade de ordenação, qualquer um.

Você pode usá-los como qualquer outro número:

por exemplo:

float min = Float.NEGATIVE_INFINITY;
float max = Float.POSITIVE_INFINITY;
float nan = Float.NaN;

Positive Infinito é um número positivo tão grande que não pode ser representado normalmente. Infinito negativo é um número negativo tão grande que não pode ser representado normalmente. NaN significa "não é um número" e os resultados de uma operação matemática que não deu um número - como dividir 0 por 0.

isto não é uma resposta completa (ou não esclareceu o suficiente) - considere o seguinte:

double a = Math.pow(10,600) - Math.pow(10,600); //==NaN

matematicamente todo mundo pode ver que é 0. mas para a máquina é uma "Infinito" - "Infinito" (da mesma ordem) bruxa é realmente NaN ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top