Maison >développement back-end >Golang >Pourquoi les multiplications à virgule flottante non typées et typées dans Go produisent-elles des résultats différents ?
Pourquoi ces deux float64 ont-ils des valeurs différentes ?
Introduction
Lorsque vous travaillez avec du flottant -numéros de points, il est essentiel de comprendre les limites de précision. Considérez le code Go suivant :
fmt.Println(912 * 0.01) fmt.Println(float64(912) * 0.01)
(lien Go Playground)
La deuxième ligne produit un résultat attendu de "9.120000000000001" en raison des limitations de précision en virgule flottante.
Question
Cependant, la première ligne s'imprime "9.12" sans aucune précision finale. Cela soulève la question : pourquoi Go n'effectue-t-il pas une multiplication en virgule flottante pour les deux constantes non typées, puis les convertit-il en un littéral 9.12 ?
Réponse
Selon Dans la spécification du langage Go, les expressions constantes sont évaluées exactement. Par conséquent, "912 * 0,01" est évalué avec précision, ce qui équivaut à "9,12".
Lorsque vous tapez cast le premier opérande en float64 (float64(912)), l'autre opérande (0,01) est également tapez implicitement cast en float64. 0,01 ne peut pas être représenté exactement dans un float64, donc la précision est perdue à un endroit différent de celui du premier exemple. Ceci explique les différents résultats observés lors de l'utilisation de fmt.Println() avec différentes expressions d'entrée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!