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?

Était-ce utile?

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ées float 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 pour octet   et short , utilisez un float (au lieu de    double ) 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 couvre BigDecimal et   autres classes utiles fournies par le   Plate-forme Java.

  •   
  • double : le type de données double 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.,

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top