Maison >développement back-end >Golang >Comment comparer avec précision les nombres à virgule flottante pour l'égalité en Go ?

Comment comparer avec précision les nombres à virgule flottante pour l'égalité en Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-10 08:14:09284parcourir

How to Accurately Compare Floating-Point Numbers for Equality in Go?

Comparaison Go Float : une approche globale

La comparaison de nombres à virgule flottante (flotteurs) pour l'égalité dans Go nécessite une approche nuancée en raison de limitations et complexités inhérentes à l'arithmétique à virgule flottante.

Utilisation de la représentation binaire : une méthode limitée Solution

Le code fourni compare les flotteurs en examinant leurs représentations binaires et en tenant compte d'une différence d'un bit. Cependant, cette approche est imparfaite car elle ne tient pas compte de l’importance de la position du bit dans la représentation binaire. Par exemple, une différence dans le bit le moins significatif pour de très grands flotteurs peut être sans conséquence, tandis que pour de très petits flotteurs, elle pourrait représenter un écart significatif.

Une approche plus précise et générique

Une méthode plus robuste et précise consiste à calculer la différence entre les deux flotteurs à l'aide de la fonction math.Abs. En définissant un seuil approprié, vous pouvez déterminer si la différence est négligeable et considérer les flotteurs « presque égaux ».

Cette approche vous permet de :

  • Gérer à la fois les petits et les grands flotteurs efficacement
  • Éliminer la subjectivité de l'heuristique de différence d'un bit
  • Définir le seuil d'égalité en fonction de l'application spécifique exigences

Exemple de mise en œuvre

Vous trouverez ci-dessous un exemple de mise en œuvre :

import (
    "fmt"
    "math"
)

const float64EqualityThreshold = 1e-9

func almostEqual(a, b float64) bool {
    return math.Abs(a - b) <= float64EqualityThreshold
}

func main() {
    a := 0.1
    b := 0.2
    fmt.Println(almostEqual(a + b, 0.3)) // true
}

Cette solution est plus générique et adaptable, vous permettant de gérez divers scénarios et définissez le seuil d'égalité de manière appropriée pour votre application.

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:
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