Mengapa pengkompil Go membuang ralat untuk membahagikan apungan dengan sifar dan bukannya amaran?

DDD
Lepaskan: 2024-10-28 20:51:02
asal
1063 orang telah melayarinya

Why does the Go compiler throw an error for dividing a float by zero instead of a warning?

Go Compiler Error untuk Float Zero Division

Go programmer mungkin menghadapi ralat pengkompil apabila membahagikan nombor titik terapung dengan sifar, seperti yang digambarkan dalam coretan kod di bawah:

<code class="go">func main() {
    var y float64 = 0.0
    var x float64 = 4.0 / y
    fmt.Println(x)
}</code>
Salin selepas log masuk

Kod ini akan mengembalikan ralat yang serupa dengan:

prog.go:9:22: division by zero
Salin selepas log masuk

Memahami Ralat

Seseorang mungkin mempersoalkan mengapa pengkompil menghasilkan ralat dan bukannya mencetak amaran pengkompil. Jawapannya terletak pada sifat pemalar berangka dalam Go.

Ketepatan Pemalar Berangka

Pemalar berangka Go mempunyai ketepatan arbitrari dan tidak melimpah. Ini bermakna mereka tidak boleh mewakili nilai IEEE-754 seperti infiniti atau -0.

Bahagian dengan Sifar

Bahagian dengan sifar ialah operasi yang tidak ditentukan dalam matematik dan akan membawa kepada infiniti dalam IEEE-754. Walau bagaimanapun, memandangkan pemalar angka Go kekurangan perwakilan untuk infiniti, pengkompil menganggap pembahagian dengan sifar sebagai ralat untuk mengelakkan situasi tidak ditentukan dalam kod.

Alternatif untuk Infiniti

Jika seseorang memerlukan nilai infiniti untuk pengiraan, mereka boleh menggunakan fungsi math.Inf. Contohnya:

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

Atas ialah kandungan terperinci Mengapa pengkompil Go membuang ralat untuk membahagikan apungan dengan sifar dan bukannya amaran?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan