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
Libérer: 2024-12-10 08:14:09
original
219 Les gens l'ont consulté

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
}
Copier après la connexion

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!

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