Menukar float64 kepada uint64: Ketepatan dan Perwakilan
Apabila cuba menukar nombor float64 kepada uint64, adalah penting untuk mempertimbangkan ketepatan dan perwakilan perbezaan antara dua jenis data.
Malar Perwakilan
Pemalar dalam Go diwakili dengan ketepatan sewenang-wenangnya, bermakna ia boleh mewakili nilai dengan magnitud yang sangat besar tanpa kehilangan ketepatan.
Perwakilan Titik Terapung
Sebaliknya, nombor titik terapung seperti float64 mengikut IEEE 754 standard, yang menggunakan 52 bit (daripada 64) untuk menyimpan significand (digit). Akibatnya, float64 boleh mewakili maksimum 2^52 digit.
Isu Ketepatan
Dalam contoh yang disediakan, nilai pemalar 6161047830682206209 tidak boleh diwakili dengan tepat kerana apungan ia mengandungi lebih daripada 52 digit. Apabila ditugaskan kepada pembolehubah float64 n, nilai dibundarkan dan dipenggal, menghasilkan sedikit perbezaan daripada pemalar asal.
Pertimbangan Penukaran
Setelah menukar n kepada uint64 , bahagian pecahan dibuang, seterusnya mengurangkan ketepatan perwakilan. Ini kerana uint64 hanya mewakili nombor bulat tanpa komponen pecahan.
Mengira Kapasiti Digit
Untuk menentukan bilangan maksimum digit yang boleh diwakili dengan tepat oleh float64, kami hitung 2^52, yang menghasilkan 9007199254740992. Sebarang pemalar lebih besar daripada nilai ini akan menghadapi isu ketepatan apabila disimpan dalam float64.
Mengesahkan Nilai
Mencetak nilai n float64 asal mendedahkan bahawa ia telah dibundarkan kepada 6161047830682206208, yang berbeza sedikit daripada pemalar asal. Ini menunjukkan bahawa masalahnya terletak pada penukaran yang tidak tepat daripada pemalar kepada float64, bukannya pada penukaran seterusnya kepada uint64.
Nombor Lebih Kecil
Untuk nombor yang lebih kecil yang digitnya boleh diwakili dengan tepat oleh float64 (cth., 7830682206209), penukaran kepada uint64 berfungsi seperti yang diharapkan, mengekalkan nilai asal.
Atas ialah kandungan terperinci Sejauh manakah Tepat Penukaran float64 kepada uint64 dalam Go, Mempertimbangkan Had Ketepatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!