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

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

Linda Hamilton
Libérer: 2024-12-09 19:14:11
original
418 Les gens l'ont consulté

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

Allez : une façon plus intelligente de comparer les flotteurs

En vous plongeant dans les complexités de l'IEEE 754 et des représentations flottantes binaires, vous rencontrerez peut-être un question persistante : comment comparer avec précision deux flotteurs pour l'égalité dans Go. Une approche potentielle consiste à examiner les différences au niveau des bits, en utilisant une solution comme celle-ci :

func Equal(a, b float64) bool {
    ba := math.Float64bits(a)
    bb := math.Float64bits(b)
    diff := ba - bb
    if diff < 0 {
        diff = -diff
    }
    return diff < 2
}
Copier après la connexion

Cette méthode vise à permettre une différence sur un seul bit, la considérant comme « presque égale ». Cependant, cette approche a des limites.

Une approche plus efficace

Au lieu de s'appuyer sur la manipulation de bits, une solution plus fiable consiste à soustraire directement les deux nombres et à vérifier le différence absolue par rapport à un seuil prédéfini. Cette approche est plus intuitive et précise :

const float64EqualityThreshold = 1e-9

func almostEqual(a, b float64) bool {
    return math.Abs(a - b) <= float64EqualityThreshold
}
Copier après la connexion

Pourquoi c'est supérieur

Cette méthode évite les pièges de la représentation des bits, qui peuvent conduire à des comparaisons imprécises dans certaines situations . En comparant directement la différence numérique, vous gagnez en précision et en exactitude. De plus, cela élimine le besoin d'inspecter manuellement les différences de bits, ce qui rend le code plus concis et maintenable.

En résumé, pour comparer les flottants dans Go, l'approche recommandée consiste à soustraire les deux nombres et à comparer la différence absolue avec un seuil prédéfini. Cette méthode fournit un moyen plus précis et plus efficace de déterminer la « quasi-égalité » par rapport aux manipulations de bits.

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