Golang ialah bahasa pengaturcaraan yang sangat popular yang popular secara meluas kerana ciri yang cekap dan berkuasa. Walau bagaimanapun, apabila menggunakan Golang, anda mungkin menghadapi masalah tertentu, salah satunya adalah kehilangan ketepatan.
Sesetengah pembangun mungkin berpendapat bahawa Golang ialah bahasa yang sangat baik untuk pengiraan berangka, tetapi anda mungkin menghadapi masalah kehilangan ketepatan. Jadi, bagaimanakah kehilangan ketepatan berlaku?
Mula-mula, mari belajar tentang nombor titik terapung. Golang menggunakan standard IEEE 754 untuk mewakili nombor titik terapung, iaitu nombor titik terapung diwakili sebagai nombor binari dengan bit tanda, eksponen dan mantissas. Perwakilan ini boleh mewakili nombor yang sangat besar atau sangat kecil dengan sangat cekap.
Walau bagaimanapun, disebabkan oleh batasan perwakilan ini, Golang tidak dapat mewakili nombor tertentu dengan tepat. Sebagai contoh, apabila anda cuba menukar 0.1 kepada binari, ia menghasilkan gelung mantissas yang tidak terhingga. Oleh itu, Golang akan membundarkan nombor ini, mengakibatkan kehilangan ketepatan.
Berikut ialah contoh kod yang menunjukkan masalah kehilangan ketepatan di Golang:
package main import "fmt" func main() { a := 0.1 b := 0.2 c := a + b fmt.Println(c) }
Dalam kod di atas, kami menambah 0.1 dan 0.2 dan kemudian mencetak hasilnya ke konsol. Anda mungkin menjangkakan output ialah 0.3, tetapi ia sebenarnya 0.30000000000000004.
Ini kerana di Golang, 0.1 atau 0.2 tidak boleh diwakili dengan tepat, jadi hasil tambahnya juga tidak boleh diwakili dengan tepat. Nombor yang terhasil menjadi tidak tepat kerana ralat pembundaran.
Walaupun contoh ini mungkin nampak remeh, ia boleh menjadi masalah serius apabila pengiraan ketepatan tinggi diperlukan. Sebagai contoh, semasa membuat pengiraan kewangan, ketepatan adalah sangat penting.
Untuk menyelesaikan masalah ini, kita boleh menggunakan jenis nombor tepat di Golang. Golang menyediakan pakej yang dipanggil big
, yang mengandungi beberapa jenis nombor yang tepat, seperti Int
dan Float
.
Berikut ialah contoh kod menggunakan big.Float
untuk menyelesaikan masalah di atas:
package main import ( "fmt" "math/big" ) func main() { a := big.NewFloat(0.1) b := big.NewFloat(0.2) c := new(big.Float).Add(a, b) fmt.Println(c) }
Dalam kod di atas, kami mencipta dua nombor titik terapung tepat menggunakan big.NewFloat
dan kemudian menggunakan Add
kaedah untuk menambahnya. Akhirnya, kami mencetak hasilnya, kali ini output adalah 0.3.
Untuk meringkaskan, walaupun Golang ialah bahasa pengaturcaraan yang berkuasa, anda mungkin menghadapi masalah kehilangan ketepatan apabila ia berkaitan dengan pengiraan berangka. Untuk menyelesaikan masalah ini, anda boleh menggunakan jenis angka tepat dalam Golang. Ingat, ketepatan adalah sangat penting apabila melakukan pengiraan ketepatan tinggi.
Atas ialah kandungan terperinci ketepatan golang hilang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!