Rumah > pembangunan bahagian belakang > Golang > Mengapa Pendaraban Titik Terapung Tidak Ditaip dan Ditaip dalam Go Menghasilkan Keputusan Berbeza?

Mengapa Pendaraban Titik Terapung Tidak Ditaip dan Ditaip dalam Go Menghasilkan Keputusan Berbeza?

Linda Hamilton
Lepaskan: 2024-12-25 16:32:11
asal
427 orang telah melayarinya

Why Do Untyped and Typed Floating-Point Multiplications in Go Produce Different Results?

Mengapa Dua float64 Ini Mempunyai Nilai Berbeza?

Pengenalan

Apabila bekerja dengan terapung -nombor mata, adalah penting untuk memahami had ketepatan. Pertimbangkan kod Go berikut:

fmt.Println(912 * 0.01)
fmt.Println(float64(912) * 0.01)
Salin selepas log masuk

(pautan Go Playground)

Barisan kedua menghasilkan hasil jangkaan "9.120000000000001" disebabkan ketepatan titik terapung had.

Soalan

Walau bagaimanapun, baris pertama mencetak "9.12" tanpa sebarang ketepatan mengekor. Ini menimbulkan persoalan: mengapa Go tidak melakukan pendaraban titik terapung untuk dua pemalar yang tidak ditaip dan kemudian menukarnya kepada literal 9.12?

Jawapan

Mengikut spesifikasi bahasa Go, ungkapan malar dinilai dengan tepat. Oleh itu, "912 * 0.01" dinilai dengan tepat, iaitu sama dengan "9.12".

Apabila anda menaip hantar operan pertama ke float64 (float64(912)), operan lain (0.01) juga secara tersirat taip cast ke float64. 0.01 tidak boleh diwakili tepat dalam float64, jadi ketepatan hilang di lokasi yang berbeza daripada contoh pertama. Ini menerangkan hasil berbeza yang diperhatikan apabila menggunakan fmt.Println() dengan ungkapan input yang berbeza.

Atas ialah kandungan terperinci Mengapa Pendaraban Titik Terapung Tidak Ditaip dan Ditaip dalam Go Menghasilkan Keputusan Berbeza?. 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