Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Ralat Go Compiler Keluar pada Pembahagian oleh Sifar dengan Terapung?

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

DDD
DDDasal
2024-10-31 17:39:02959semak imbas

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>

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!

Kenyataan:
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