Ketepatan Titik Terapung dalam Python
Apabila melakukan pengiraan dengan nombor titik terapung, adalah penting untuk mengetahui kemungkinan ralat pembundaran. Dalam Python, gelagat nombor apungan boleh menjadi tidak dijangka, yang membawa kepada kehilangan hasil dalam simulasi.
Penjelasan Isu Pembundaran
Pertimbangkan kod Python berikut:
for i_delta in range(0, 101, 1): delta = float(i_delta) / 100 ... filename = 'foo' + str(int(delta * 100)) + '.dat'
Dalam kod ini, ralat pembundaran berlaku kerana float(29) / 100 tidak betul-betul 0.29 tetapi sebaliknya 0.28999999999999998. Anggaran ini menghalang nama fail yang betul daripada dijana untuk delta = 0.29.
Corak Ralat Pembundaran
Ralat pembundaran tidak konsisten merentas semua integer. Untuk menyiasat corak, skrip Python berikut telah dicipta:
import sys n = int(sys.argv[1]) for i in range(0, n + 1): a = int(100 * (float(i) / 100)) if i != a: print i, a
Walau bagaimanapun, skrip ini tidak mendedahkan sebarang corak yang jelas dalam nombor yang ralat pembundaran berlaku.
Sebab daripada Ralat
Punca ralat ini terletak pada sifat perwakilan titik terapung. Nombor yang tidak boleh dinyatakan sebagai kuasa tepat dua tidak boleh diwakili dengan tepat sebagai nombor titik terapung. Dalam kes ini, nombor titik terapung memberikan anggaran, yang kadangkala boleh kurang daripada nilai sebenar.
Penyelesaian
Untuk mengelakkan ralat pembundaran ini, adalah disyorkan untuk menggunakan nombor perpuluhan (cth., modul Perpuluhan atau pecahan) untuk pengiraan yang memerlukan perwakilan angka yang tepat.
Atas ialah kandungan terperinci Mengapa Pengiraan Titik Terapung dalam Python Membawa kepada Penjanaan Nama Fail Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!