Ketepatan Nombor Titik Terapung dalam Go: float32 vs. float64
Dalam Go, nombor titik terapung diwakili menggunakan IEEE 754 format binari dalam asas 2. Ketepatan nombor titik terapung merujuk kepada bilangan bit yang digunakan untuk mewakilinya. mantissa, yang menentukan ketepatan nombor. Go menyediakan dua jenis mata terapung biasa: float32 dan float64.
Perbezaan antara jenis ini terletak pada ketepatannya. Walaupun float32 mempunyai mantissa 23-bit, float64 mempunyai mantissa 52-bit. Ketepatan yang lebih tinggi ini membolehkan float64 mewakili julat nilai yang lebih luas dan dengan ketepatan yang lebih tinggi berbanding float32.
Untuk menggambarkan ini, mari kita pertimbangkan contoh yang disediakan:
func main() { a := float64(0.2) // Initializing a float64 variable a += 0.1 a -= 0.3 var i int for i = 0; a < 1.0; i++ { a += a } fmt.Printf("After %d iterations, a = %e\n", i, a) }
Program ini menunjukkan pengumpulan ralat titik terapung apabila melakukan operasi berulang pada nilai. Dalam kes ini, pembolehubah 'a' dimulakan dengan nilai 0.2, dan kemudian operasi tambah dan tolak dilakukan dengan 0.1 dan 0.3, masing-masing. Ini diulang sehingga 'a' menjadi lebih besar daripada atau sama dengan 1.0.
Apabila anda menjalankan program ini dengan float32 invece di float64, ia memasuki gelung tak terhingga. Ini kerana perwakilan binari 0.1 dalam float32 berbeza sedikit daripada nilai perpuluhan sebenar, mengakibatkan ralat pembundaran. Akibatnya, nilai 'a' tidak terkumpul dengan tepat dan gelung berterusan selama-lamanya.
Sebaliknya, float64 mempunyai ketepatan yang lebih tinggi dan boleh mewakili nilai dengan lebih tepat. Oleh itu, atur cara yang sama menggunakan float64 akhirnya menamatkan gelung apabila 'a' mencapai 1.000000e 00.
Untuk lebih memahami perbezaan dalam ketepatan, anda boleh menggunakan matematik.Float32bits dan math.Float64bits berfungsi untuk menukar terapung -titik nilai kepada perwakilan binari mereka. Ini membolehkan anda memeriksa pengedaran bit dan mengenal pasti sumber perbezaan ketepatan antara float32 dan float64.
Atas ialah kandungan terperinci float32 vs. float64 Go: Berapa Banyak Ketepatan Yang Anda Perlukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!