Ketepatan Titik Terapung dalam Go: float32 vs float64
Dalam Go, nombor titik terapung diwakili menggunakan format binari IEEE 754. Format ini menyediakan tahap ketepatan yang berbeza-beza bergantung pada jenis data yang digunakan, dengan float32 menawarkan kurang ketepatan berbanding float64.
Pertimbangkan coretan kod berikut, yang menunjukkan浮点数误差:
package main import "fmt" func main() { a := float64(0.2) 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) }
Apabila menggunakan float64, atur cara dengan betul output:
After 54 iterations, a = 1.000000e+00
Walau bagaimanapun, jika float32 digunakan sebaliknya, atur cara memasuki gelung tak terhingga. Ini kerana float32 tidak boleh mewakili nilai perpuluhan 0.1 dengan tepat, menghasilkan nilai yang sedikit bulat. Nilai bulat ini menghalang gelung daripada ditamatkan.
Untuk memahami perbezaan ini, periksa perwakilan binari bagi nilai titik terapung yang terlibat:
float32(0.1): 00111101110011001100110011001101 float32(0.2): 00111110010011001100110011001101 float32(0.3): 00111110100110011001100110011010 float64(0.1): 0011111110111001100110011001100110011001100110011001100110011010 float64(0.2): 0011111111001001100110011001100110011001100110011001100110011010 float64(0.3): 0011111111010011001100110011001100110011001100110011001100110011
Perhatikan bahawa perwakilan binari 0.1 dalam float32 berbeza sedikit daripada float64. Perbezaan sedikit ini membawa kepada tafsiran nilai yang berbeza mengikut jenis float32, menghasilkan tingkah laku yang diperhatikan.
Ringkasnya, apabila menggunakan float32, nilai anggaran 0.1 disimpan dalam ingatan, yang mempengaruhi ketepatan dan ketepatan operasi titik terapung. Sebaliknya, float64 boleh mewakili nilai perpuluhan 0.1 dengan lebih tepat, membolehkan pengiraan yang lebih tepat.
Atas ialah kandungan terperinci Ketepatan Titik Terapung Go: Mengapakah `float32` Menyebabkan Gelung Tak Terhingga Manakala `float64` Tidak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!