Ralat Pengkompil untuk Bahagian Sifar dalam Operasi Titik Terapung Go
Apabila cuba melakukan pembahagian dengan sifar menggunakan pembolehubah float64 dalam Go, pengkompil melemparkan ralat daripada mengeluarkan amaran. Tingkah laku ini mungkin kelihatan berlawanan dengan intuisi, kerana seseorang mungkin menjangkakan amaran lebih sesuai dalam situasi sedemikian.
Pertimbangkan contoh berikut:
<code class="go">func main() { var y float64 = 0.0 var x float64 = 4.0 / y fmt.Println(x) }</code>
Coretan kod ini menghasilkan Inf keluaran, yang menunjukkan bahawa hasilnya adalah infiniti positif.
Walau bagaimanapun, jika kita mengubah suai kod untuk membahagikan secara eksplisit dengan 0.0, pengkompil menimbulkan ralat:
<code class="go">func main() { var x float64 = 4.0 / 0.0 fmt.Println(x) }</code>
Mesej ralat ialah: prog.go: 9:22: pembahagian dengan sifar.
Memahami Gelagat
Pemalar berangka Golang, termasuk titik terapung, mempunyai sifat khas dan tidak dipetakan secara langsung ke apungan IEEE754 jenis. Tidak seperti jenis ini, pemalar Go tidak boleh mewakili infiniti atau sifar negatif.
Menurut dokumentasi Go:
"Pemalar berangka mewakili nilai tepat ketepatan arbitrari dan tidak melimpah. Akibatnya, tiada pemalar yang menandakan nilai sifar negatif, infiniti dan bukan nombor IEEE-754."
Pilihan reka bentuk ini menghalang limpahan berterusan, seperti yang ditunjukkan oleh contoh berikut:
<code class="go">var x float64 = 1e1000 / 1e999 // yes, this is 10</code>
Jika anda memerlukan nilai infiniti, anda boleh menggunakan fungsi matematik.Inf:
<code class="go">var x float64 = math.Inf(1)</code>
Atas ialah kandungan terperinci Mengapa Go Compiler Melemparkan Ralat untuk Bahagian Sifar dalam Operasi Titik Terapung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!