Mengapa Ralat Go Compiler Keluar pada Pembahagian oleh Sifar dengan Terapung?

DDD
Lepaskan: 2024-10-31 17:39:02
asal
1021 orang telah melayarinya

Why Does Go Compiler Error Out on Division by Zero with Floats?

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

Output:

+Inf
Salin selepas log masuk

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

Output:

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

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

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!

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