Java e o tamanho de um duplo

Estou neste momento a aprender Java e no meu livro há escrito uma lata dupla que vai de ~ 4,94 e-324 a ~1798 e+308

Tenho algumas perguntas para isso: como pode um duplo ser zero (0)? Como o duplo d = 0; Porque é que isso é possível quando um duplo não tem um alcance incluindo zero? E porque faltam os números negativos? Estou a esquecer-me de alguma coisa? Obrigado pela ajuda!

Sinceramente, Maxi

Author: Maxbit, 2015-02-06

2 answers

Os duplos e flutuadores na maioria das linguagens de programação são mais complicados do que isso. Você pode encontrar uma explicação mais técnica ao procurar a norma IEEE 754 para números de vírgula flutuante.

Basicamente, números de vírgula flutuante (em java, OS tipos variáveis float e double) são efetivamente armazenados em notação científica, com um sinal, mantissa, e expoente. (A base para o expoente é sempre 2). Como isso é convertido em formato binário é um pouco complicado, mas o a parte importante para saber é que os números são efetivamente armazenados como +/- mantissa * 2^exponent.

O mantissa e o expoente, no entanto, ambos têm intervalos fixos. O que seu manual está falando é sobre a gama de valores que são possíveis com base na gama do expoente. Isto é, quão grandes ou pequenos podem ser os valores se você escolher o maior ou menor expoente possível, ignorando o sinal do valor. Zero também é ignorado para este caso, porque na notação científica, zero é um caso trivial que não ilustre a gama disponível de expoentes.

As duplas têm cerca de 15-16 dígitos de precisão, ou seja, você pode representar números com um mantissa de comprimento de 15-16 dígitos, independentemente do expoente. Independentemente do mantissa, você pode representar números que variam de cerca de 10^-324 a cerca de 10^308. E independentemente do mantissa e expoente, você pode representar valores positivos e negativos.

 1
Author: zstewart, 2015-02-06 19:35:12
Acho que estás a interpretar a escala num sentido matemático. O que o seu livro significa por intervalo é o quão pequeno de um número finito e quão grande de um número finito Double pode produzir, tanto para valores negativos como positivos. Então, basicamente, quão perto ele pode chegar a 0 com valores finitos e quão perto ele pode chegar a infinito com valores finitos. O intervalo real num sentido matemático de Double é algo como -1.7*10^308 a 1.7*10^308.
A turma tem membros que a contêm. Valor mínimo e máximo. Dê uma olhada em Min_VALUE e Max_VALUE membros para Double. Na verdade, a gama matemática é um subproduto da Gama no seu livro ([-Double.MAX_VALUE, Double.MAX_VALUE]) , o que é um resultado de quantos graus de Precisão Double pode aguentar.
 1
Author: HavelTheGreat, 2015-02-06 19:39:36