Bom sei que int e float tem 32bits e long e double tem 64bits e que para saber a quantidade de bytes é 2 ^31 -1 ou 63-1 para ter tudo.
Mas quando eu estava fazendo um exercício de fibo o double funcionou e o long começou a zerar apartir de 65! e o double chegou a 100! só que negativo.
Agora não lembro ou nem sei mesmo :oops: , mas o pq o double consegue chegar a 100 e float não, esquece o porque dodouble depois de uma quantidade ele vira negativo.
O double consegue números maiores do que o long… só que com perda de precisão…
Vou tentar explicar mais ou menos…aqui como funciona
O long… é um tipo inteiro… entao vc tem os numeros 1, 2, 3, 4, 5 e assim por diante até chegar no número máximo… um por um…
No double… o que vc tem é uma exponenciação… com mantissa e expoente… o numero double é um número calculado…
Por exemplo o número: 12… para representar ele em double teriamos a mantissa 12 e o expoente 0… e a matemática seria 12 * 10 (elevado a 0) que resultaria em 12
Agora o número: 135,66 Mantissa 13566 Expoente… -2… 13566 * 10 (elevado a -2) que resultaria em 135,66
Um número gigantesco 1992883000000000000,01 Esse número teria que caber todo na mantissa para ser representado corretamente… só que nao cabe… entao a mantissa fica com 1992883 e o expoente com 12
19992883 * 10 (elevado a 12) que resulta em: 1992883000000000000 (sem as casas decimais mesmo)
O double conseguiu guardar um número grande… só que perdeu em precisão…
E obrigado rogelgarcia por ter dado esta esplicação e mspereira por ter me lembrado deste link do doc da sun onde tive outra dica além de ver o padrão IEE754
onde encontrei este link, não li tudo,mas da uma boa explicação: