Quelle est la gamme inclusive de float et double en Java?
-
22-07-2019 - |
Question
Quelle est la plage inclusive de float et double en Java?
Pourquoi n'êtes-vous pas recommandé d'utiliser float ou double pour tout ce qui concerne la précision?
La solution
Double
La classe a des membres contenant les valeurs Min et Max pour le type.
2^-1074 <= x <= (2-2^-52)·2^1023 // where x is the double.
Découvrez les Min_VALUE
et les MAX_VALUE
membres finaux statiques de Double
.
(certaines personnes) Certains suggèrent de ne pas utiliser les types à virgule flottante dans les cas où l'exactitude et la précision sont essentielles, car les erreurs d'arrondi peuvent gêner les calculs par des quantités mesurables.
Autres conseils
Types de données primitifs de Java
booléen: 1 bit. Peut prendre les valeurs true et false uniquement.
octet: 1 octet signé (complément de deux). Couvre les valeurs de -128 à 127.
bref: 2 octets, signé (complément à deux), -32 768 à 32 767
int: 4 octets, signé (complément à deux). -2 147 483 648 à 2 147 483 647.
long: 8 octets signés (complément de deux). Plage de -9,223,372,036,854,775,808 à +9,223,372,036,854,775,807.
float: 4 octets, IEEE 754. Couvre une plage allant de 1,40129846432481707e-45 à 3,40282346638528860e + 38 (positif ou négatif).
double: 8 octets IEEE 754. Couvre une plage allant de 4,94065645841246544e à 1.79769313486231570e + 308d (positif ou négatif).
char: 2 octets, non signé, Unicode, 0 à 65 535
Les nombres à virgule flottante binaires ont des caractéristiques de précision intéressantes, car la valeur est stockée sous la forme d'un entier binaire élevé à une puissance binaire. Lorsqu'il s'agit de valeurs sous-entières (c'est-à-dire comprises entre 0 et 1), les puissances négatives de deux "arrondissent" très différemment des puissances négatives de dix.
Par exemple, le nombre 0.1 peut être représenté par 1 x 10 -1 , mais il n’existe aucune combinaison d’exposant en base 2 et de mantisse qui puisse représenter avec précision 0,1 - le nombre le plus proche que vous obtenez est 0.10000000000000001.
Donc, si vous utilisez une application dans laquelle vous travaillez avec des valeurs telles que 0.1 ou 0.01, mais où de petites erreurs (inférieures à 0.000000000000001%) ne peuvent être tolérées, les nombres à virgule flottante ne sont pas pour vous.
Inversement, si les puissances de dix ne sont pas "spéciales". Pour votre application (les puissances de dix sont importantes dans les calculs de devise, mais pas dans, disons, la plupart des applications de la physique), il est alors préférable d'utiliser une virgule flottante binaire, car elle est généralement plus rapide d'un ordre de grandeur et est beaucoup plus efficace en mémoire.
L'article de la documentation Python sur les problèmes et limitations en virgule flottante fait un excellent travail. d'expliquer cette question sous une forme facile à comprendre. Wikipedia a aussi un bon article sur le point flottant qui explique le calcul de la représentation.
De Types de données de primitive :
float:
le type de donnéesfloat
est un fichier IEEE 754 32 bits à simple précision point flottant. Sa gamme de valeurs est au-delà de la portée de cette discussion, mais est spécifié dans la section 4.2.3 de la spécification du langage Java. Comme avec les recommandations pouroctet
etshort
, utilisez unfloat
(au lieu dedouble
) si vous devez économiser de la mémoire dans de grands tableaux de virgule flottante Nombres. Ce type de données ne devrait jamais être utilisé pour des valeurs précises, telles que devise. Pour cela, vous devrez utilisez le java.math.BigDecimal . classe à la place. Numéros et Strings couvreBigDecimal
et autres classes utiles fournies par le Plate-forme Java.
double
: le type de donnéesdouble
est un document IEEE 754 64 bits à double précision point flottant. Sa gamme de valeurs est au-delà de la portée de cette discussion, mais est spécifié dans la section 4.2.3 de la spécification du langage Java. Pour les valeurs décimales, ce type de données est généralement le choix par défaut. Comme mentionné ci-dessus, ce type de données devrait ne jamais être utilisé pour des valeurs précises, telles que comme devise.
Pour la plage de valeurs, voir la section 4.2.3 Types, formats et valeurs à virgule flottante du JLS.
Bien sûr, vous pouvez utiliser des flottants ou des doubles pour "critique". choses ... De nombreuses applications ne font que réduire les chiffres en utilisant ces types de données.
Vous avez peut-être mal compris certaines des mises en garde concernant les nombres à virgule flottante, telles que la recommandation de ne jamais comparer pour une égalité exacte , etc.,
.