Percanggahan Titik Terapung di Java: Had Ketepatan
Dalam atur cara Java, adalah mungkin untuk menghadapi gelagat pelik apabila menjumlahkan nilai titik terapung . Seperti yang diperhatikan dalam pertanyaan, gelung mudah menambah 0.04 kepada tatasusunan 25 nilai berganda menghasilkan hasil dengan gelagat yang tidak dijangka.
Nilai titik terapung, seperti IEEE tunggal dan beregu, biasanya digunakan dalam bahasa pengaturcaraan. Walau bagaimanapun, format ini tidak mewakili kebanyakan pecahan perpuluhan dengan tepat. Ini disebabkan oleh perwakilan titik terapung binari mereka, yang pada asasnya berbeza daripada titik terapung perpuluhan.
Secara khusus, satu-satunya nilai pecahan yang boleh diwakili tepat dalam titik terapung binari ialah jumlah kuasa negatif dua , seperti 0.5 (2^-1), 0.125 (2^-3), atau 0.625 (2^-1 2^-3). Apabila pecahan perpuluhan tidak boleh diwakili dengan tepat sebagai jumlah sedemikian, hasilnya ialah anggaran sedikit.
Dalam contoh yang diberikan, nilai 0.96 tidak boleh dinyatakan dengan tepat sebagai jumlah kuasa negatif dua. Oleh itu, apabila ia ditambah kepada 0.04 dan dicetak dengan ketepatan perpuluhan penuh, hasilnya menyimpang sedikit daripada nilai asalnya.
Had ketepatan ini wujud dalam perwakilan titik terapung binari dan harus diambil kira semasa bekerja dengan pengiraan titik terapung. Dalam kes di mana ketepatan yang tepat adalah penting, menggunakan perwakilan atau algoritma alternatif mungkin diperlukan.
Atas ialah kandungan terperinci Mengapa Menambah 0.04 Berulang kali dalam Java Membawa kepada Keputusan Yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!