Comparaison Go Float : une approche plus précise et plus efficace
La tâche de comparer deux nombres à virgule flottante (float64) pour l'égalité dans Go implique généralement de gérer les complexités de l'IEEE 754 et la représentation binaire des flotteurs. Bien qu'il existe différentes approches, certains supposent que comparer des représentations binaires avec une tolérance d'un bit est une solution fiable :
func Equal(a, b float64) bool { ba := math.Float64bits(a) bb := math.Float64bits(b) diff := ba - bb if diff < 0 { diff = -diff } // accept one bit difference return diff < 2 }
Cependant, cette approche a des limites. La représentation binaire des nombres à virgule flottante n'est pas toujours significative lorsqu'on compare leurs valeurs « presque égales ». Une méthode plus directe et plus précise consiste à soustraire les deux nombres pour déterminer leur différence :
package main 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)) }
Cette approche définit un seuil pour la différence maximale acceptable et convient à la plupart des scénarios pratiques où la comparaison des flotteurs pour l'égalité est requise . Il fournit une solution plus précise et efficace que la comparaison de représentations binaires.
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!