Ralat Pengkompil Go: Bahagian Sifar Terapung
Dalam Go, cubaan membahagikan apungan terhingga dengan sifar mengakibatkan ralat penyusunan. Tingkah laku ini mungkin kelihatan berlawanan dengan intuitif, terutamanya memandangkan membahagikan dua nombor titik terapung terhingga biasanya menghasilkan infiniti, seperti yang digambarkan dalam contoh berikut:
<code class="go">func main() { var y float64 = 0.0 var x float64 = 4.0 / y fmt.Println(x) }</code>
Output:
+Inf
Walau bagaimanapun , membahagikan apungan terhingga dengan sifar mencetuskan ralat pengkompil:
<code class="go">func main() { var x float64 = 4.0 / 0.0 fmt.Println(x) }</code>
Output:
prog.go:9:22: division by zero
Sebab Ralat Pengkompil
Ini tingkah laku berpunca daripada perwakilan unik pemalar berangka dalam Go. Tidak seperti kebanyakan bahasa pengaturcaraan yang memetakan terus pemalar berangka kepada jenis apungan IEEE754, Go menganggap pemalar berangka sebagai nilai tepat bagi ketepatan arbitrari. Akibatnya, Go tidak boleh menyimpan infiniti atau sifar negatif secara semulajadi.
Pilihan reka bentuk ini memberikan faedah dari segi mengelakkan limpahan dalam pengiraan berterusan, seperti yang ditunjukkan oleh contoh berikut:
<code class="go">var x float64 = 1e1000 / 1e999 // yes, this is 10</code>
Alternatif untuk Mewakili Infiniti
Jika anda memerlukan nilai infiniti secara khusus, anda boleh menggunakan fungsi matematik.Inf(1) untuk mewakili infiniti positif atau matematik.Inf(-1) untuk infiniti negatif.
Atas ialah kandungan terperinci Mengapa Ralat Go Compiler Keluar pada Pembahagian oleh Sifar dengan Terapung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!