Mengapa Go Compiler Melemparkan Ralat untuk Bahagian Sifar dalam Operasi Titik Terapung?

Barbara Streisand
Lepaskan: 2024-10-29 19:52:02
asal
345 orang telah melayarinya

Why Does Go Compiler Throw an Error for Zero Division in Floating-Point Operations?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Jika anda memerlukan nilai infiniti, anda boleh menggunakan fungsi matematik.Inf:

<code class="go">var x float64 = math.Inf(1)</code>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan