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, Maxi2 answers
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.
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.