Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Kami Boleh Mengendalikan dan Menyelesaikan Ralat Titik Terapung?

Bagaimanakah Kami Boleh Mengendalikan dan Menyelesaikan Ralat Titik Terapung?

Linda Hamilton
Linda Hamiltonasal
2024-10-21 14:57:03625semak imbas

How Can We Handle and Resolve Floating-Point Errors?

Memahami Ralat Titik Terapung dan Penyelesaiannya

Aritmetik titik terapung menimbulkan cabaran unik kerana sifat anggarannya. Untuk menangani ralat ini dengan berkesan, kita mesti memeriksa puncanya.

Dalam Python, pengiraan titik terapung menggunakan perwakilan binari, yang membawa kepada ketidaktepatan. Seperti yang ditunjukkan dalam coretan kod, percubaan untuk menganggarkan punca kuasa dua sedikit tersasar disebabkan anggaran ini. Contohnya:

<code class="python">def sqrt(num):
    root = 0.0
    while root * root < num:
        root += 0.01
    return root

print(sqrt(4)) # Output: 2.0000000000000013
print(sqrt(9)) # Output: 3.00999999999998</code>

Untuk lebih memahami ralat ini, pertimbangkan perwakilan perpuluhan tepat 0.01 menggunakan modul perpuluhan:

<code class="python">from decimal import Decimal
print(Decimal(.01)) # Output: Decimal('0.01000000000000000020816681711721685132943093776702880859375')</code>

Rentetan ini mendedahkan bahawa nilai sebenar yang ditambah adalah sedikit lebih besar daripada 1/100. Oleh itu, perwakilan titik terapung bagi nilai perpuluhan memperkenalkan variasi kecil ini.

Untuk mengurangkan ralat ini, beberapa pendekatan wujud:

  1. Modul Perpuluhan: Menggunakan modul perpuluhan memastikan bahawa operasi dilakukan dengan tepat, menghapuskan ralat pembundaran. Dalam fungsi yang diubah suai di bawah, kami menggunakan pendekatan ini:
<code class="python">from decimal import Decimal as D
def sqrt(num):
    root = D(0)
    while root * root < num:
        root += D("0.01")
    return root

print(sqrt(4)) # Output: Decimal('2.00')
print(sqrt(9)) # Output: Decimal('3.00')</code>
  1. Tambahan Boleh Kawal: Daripada menambah terus 0.01, adalah dinasihatkan untuk menambah nilai yang betul-betul boleh diwakili sebagai apungan binari, seperti I/2**J. Dengan menggunakan 0.125 (1/8) atau 0.0625 (1/16) sebagai kenaikan, ini menghapuskan ralat anggaran.

Dengan menggabungkan kaedah ini dan teknik memanfaatkan seperti kaedah Newton, anda boleh mencapai terapung yang sangat tepat- pengiraan mata, mengembangkan pemahaman anda tentang analisis berangka dan mengendalikan aritmetik titik terapung dengan berkesan.

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengendalikan dan Menyelesaikan Ralat Titik Terapung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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