Maison > développement back-end > Golang > Comment puis-je éviter les erreurs de virgule flottante lors de la conversion de flottants en entiers dans Go ?

Comment puis-je éviter les erreurs de virgule flottante lors de la conversion de flottants en entiers dans Go ?

Barbara Streisand
Libérer: 2024-12-15 13:11:22
original
470 Les gens l'ont consulté

How Can I Avoid Floating-Point Errors When Converting Floats to Integers in Go?

Golang : éviter les erreurs à virgule flottante dans les conversions flottantes en entiers

Les opérations à virgule flottante peuvent introduire des erreurs lors de la conversion entre différents types numériques. Dans Go, la conversion d'un float64 en un int peut conduire à des résultats inattendus en raison des limitations de la représentation à virgule flottante.

Comprendre la représentation à virgule flottante

Les ordinateurs stockent généralement les données numériques au format binaire. Cependant, les nombres décimaux comme 100,55 ne peuvent pas être représentés comme un nombre fini dans un système binaire.

IEEE-754 est la norme utilisée par Go pour représenter les valeurs float64. Il utilise 53 bits pour stocker les chiffres et 11 bits pour l'exposant, permettant une plage finie de nombres mais introduisant inévitablement des approximations.

Conversion décimal en binaire

Lors de la conversion d'un nombre décimal comme 100,55 en la représentation interne float64, elle ne peut pas être exprimée avec précision. Au lieu de cela, le nombre binaire le plus proche est utilisé, ce qui donne une valeur légèrement différente de l'original.

Erreur lors de la conversion Float-to-Int

Dans l'exemple de code, soustraire float64(int(x )) devrait donner 0,55, mais la sortie est plus proche de 0,5499999999999972. Cette erreur se produit car la soustraction est effectuée entre deux représentations différentes du même nombre, le float64(int(x)) représentant 100,0 et non 100,55.

Solutions

Pour éviter les erreurs de précision, envisagez les approches suivantes :

  • Arrondir le résultat : Utiliser fmt.Printf avec une chaîne de format appropriée pour arrondir la sortie au nombre de décimales souhaité.
  • Évitez les nombres à virgule flottante : Pour les applications impliquant des devises ou des calculs précis, envisagez de représenter les valeurs comme des nombres entiers ou des nombres rationnels pour éliminer les erreurs à virgule flottante.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal