Je réalise qu'un nombre décimal ne peut être aussi précis que de manière précise comme un flotteur dans un système binaire, mais ce que je ne comprends pas est ce qui se passe à l'endroit 7 décimal de ma production de 10/7.
dans mon Premier test de sortie J'ai remarqué que la 7 (7ème place) à la fin du flotteur V La 4 (7ème place) suivie d'un 2 dans le double. Je penserais que la 7ème place dans le flotteur serait une 4 depuis la 8ème place du double est une 2. P>
float 1.4285715 Double 1.4285714285714286 P>
J'ai ensuite exécuté le prochain test de sortie en utilisant le format de flotteur à 17 places. La 8ème place de chacune est différente - le flotteur est un 6 c'est pourquoi la 7ème place est arrondie à 5 je suppose. P>
float 1.428571462631225600 Double 1.428571428571428600 P>
Dans le troisième test de sortie, j'ai essayé une distribution directe avec le format de chaîne pour voir ce qui se passerait. J'ai eu les mêmes résultats que le deuxième test. P>
Si j'ai une question simpliste à une méthode de stockage de points flottant complexe - je m'excuse. P>
float f = 10/7f; double d = 10/7d; System.out.format ("Float %1s\nDouble %2s\n", f,d); /* * Float 1.4285715 Double 1.4285714285714286 */ System.out.format ("Float %1$.17f\nDouble %2$.17f\n", f,d); /* * Float 1.428571462631225600 Double 1.428571428571428600 */ System.out.format ("Float %1s\nDouble %2s\n", (double)f,d); /* * Float 1.4285714626312256 Double 1.4285714285714286 */
4 Réponses :
Java utilise IEEE- 754 pour représenter des chiffres de points flottants . Vous pouvez en savoir plus sur le IEEE-754 Standard dans de nombreux endroits . P>
Pour une explication simplifiée, essayez ce site: P>
http://floatinat-point-gui.de/basic/ P >
Pour une explication très détaillée, essayez ceci: p>
http://docs.oracle.com/cd/ E19957-01 / 806-3568 / NCG_GOLDBERG.HTML P>
Il semble que lorsque vous utilisez un float code>, il utilise une précision par défaut de 8 chiffres pour ce numéro. Lorsque vous spécifiez une précision, il est clair que cela utilise réellement
double code> pour calculer la valeur. P>
Dans mon premier test de sortie, j'ai remarqué que la 5 (7ème place) à la fin du flotteur V La 4 (7ème place) suivie d'un 2 dans le double. Je pense que la 7ème place dans le flotteur serait une 4 depuis la 8ème place dans le double est une 2. P> blockQuote>
Cette attente n'a de sens que si vous pensez que des flotteurs sont stockés en interne en décimal et arrondi à un certain nombre de chiffres décimaux. Mais ce n'est pas vrai, les flotteurs sont stockés en interne dans binaire em> et arrondi à un certain nombre de chiffres binaires em>. P>
Vos attentes sont basées sur un malentendu de la manière dont les numéros de points flottants sont stockés. Vous voyez des doubles uniquement avoir des décimales plus précis que parce que cela en ressort d'un lieu binaire plus précis. La mise en œuvre ne stocke pas les chiffres sous une forme décimale du tout. P>
UPVOTED pour l'explication la plus précise qui explique pourquoi i> cela se produit.
Quelle est exactement votre question? (Je ne vois aucun point d'interrogation dans votre message ...)
C'est à quel point la double est stockée: - en.wikipedia.org/wiki/double-precision_floating-point_Format