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 }
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 }
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!