Maison > développement back-end > Golang > Pourquoi l'égalité à virgule flottante échoue-t-elle lors de la comparaison de variables et de littéraux ?

Pourquoi l'égalité à virgule flottante échoue-t-elle lors de la comparaison de variables et de littéraux ?

Patricia Arquette
Libérer: 2024-12-24 05:34:20
original
693 Les gens l'ont consulté

Why Does Floating-Point Equality Fail in Go When Comparing Variables and Literals?

Précision à virgule flottante en Go : comprendre la différence entre les littéraux et les variables

L'écart

En Go, le l'extrait de code suivant révèle une différence intrigante en virgule flottante calculs :

package main

import (
    "fmt"
)

func main() {
    x := 10.1
    fmt.Println("x == 10.1:        ", x == 10.1)
    fmt.Println("x*3.0 == 10.1*3.0:", x*3.0 == 10.1*3.0)
}
Copier après la connexion

Lors de son exécution, ce code produit des résultats inattendus :

x == 10.1:         true
x*3.0 == 10.1*3.0: false
Copier après la connexion

Alors que les mêmes opérations à virgule flottante sont effectuées, en utilisant soit une variable déclarée (x) soit un littéral (10.1), le contrôle d'égalité échoue.

Origine de la différence

À Pour comprendre ce comportement, il faut se plonger dans la gestion par Go des nombres à virgule flottante. Les constantes et les littéraux numériques ne sont initialement pas typés et possèdent des caractères de type "无限精度". Cependant, lorsqu'ils sont affectés à une variable ou convertis en type, ils héritent des limitations du type de destination.

Lorsque x := 10.1 est attribué, le littéral 10.1 perd une certaine précision en raison de la conversion en flottant. A l’inverse, 10,1*3,0 conserve toute sa précision dans le calcul. Cela explique la différence de valeurs observée et la fausse vérification d'égalité.

Documentation et justification

Ce comportement est décrit dans la section « Floats » du billet de blog de Go sur constantes :

"Les constantes numériques vivent dans un espace numérique de précision arbitraire ; ce ne sont que des nombres réguliers. Mais lorsqu'elles sont affectées à une variable la valeur doit pouvoir s'adapter à la destination. en Aller. Ces connaissances permettent aux développeurs d'anticiper et de gérer efficacement les problèmes liés à la précision dans leur code.

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!

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