Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Pengiraan Titik Terapung dalam Python Membawa kepada Penjanaan Nama Fail Tidak Dijangka?

Mengapa Pengiraan Titik Terapung dalam Python Membawa kepada Penjanaan Nama Fail Tidak Dijangka?

Linda Hamilton
Lepaskan: 2024-12-04 07:25:15
asal
499 orang telah melayarinya

Why Do Floating-Point Calculations in Python Lead to Unexpected Filename Generation?

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'
Salin selepas log masuk

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
Salin selepas log masuk

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!

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