Précision de la virgule flottante : Float32 vs Float64 dans Go
Pour étudier la disparité de comportement entre les programmes Go et C utilisant des valeurs à virgule flottante, Plongeons dans le monde fascinant de la représentation binaire IEEE 754.
Représenter les valeurs flottantes en Go et C
Grâce aux fonctions math.Float32bits et math.Float64bits, on peut dévoiler les représentations binaires de différentes valeurs décimales en Go :
import "math" func main() { fmt.Println(math.Float32bits(0.1)) fmt.Println(math.Float32bits(0.2)) fmt.Println(math.Float32bits(0.3)) fmt.Println(math.Float64bits(0.1)) fmt.Println(math.Float64bits(0.2)) fmt.Println(math.Float64bits(0.3)) }
Écarts dans les représentations binaires
Lors de la conversion de ces représentations binaires en décimal, nous découvrons un écart entre les valeurs float32 et float64 :
Cela indique que Go arrondit le dernier bit des valeurs float32, tandis que C se comporte différemment.
Interprétation des flotteurs par C
Le Le standard C permet aux implémentations de gérer les constantes flottantes de différentes manières. Dans l'implémentation spécifique testée, la valeur de 0,1 a été arrondie différemment que dans Go, entraînant une divergence dans les itérations de boucle.
Conclusion
Le traitement nuancé du flottant- les valeurs en points dans Go et C soulignent l'importance de comprendre la représentation des données pour un comportement de code précis et prévisible.
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!