Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengurangkan Ralat Titik Terapung dalam Python?

Bagaimana untuk Mengurangkan Ralat Titik Terapung dalam Python?

Susan Sarandon
Susan Sarandonasal
2024-10-21 15:08:30935semak imbas

How to Mitigate Floating Point Errors in Python?

Mengelakkan Ralat Titik Terapung dalam Python

Dalam bidang pengaturcaraan, adalah penting untuk memahami selok-belok pengiraan titik terapung, kerana mereka boleh memperkenalkan ralat yang tidak dijangka jika tidak dikendalikan dengan betul. Artikel ini meneroka contoh praktikal yang menyerlahkan masalah aritmetik titik terapung.

Masalah Akar Kuasa Dua

Pertimbangkan fungsi Python yang direka bentuk untuk menganggarkan punca kuasa dua:

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

Menggunakan fungsi ini, kami menemui hasil yang mengejutkan:

>>> sqrt(4)
2.0000000000000013
>>> sqrt(9)
3.00999999999998</code>

Aritmetik titik terapung menerangkan ketidaktepatan ini. Apabila mewakili nombor pecahan, komputer menyimpannya sebagai gabungan integer dan eksponen. Disebabkan oleh pengehadan dalam perwakilan ini, nilai perpuluhan tertentu tidak boleh diwakili dengan tepat, membawa kepada anggaran.

Memahami Ralat

Dalam kod di atas, isunya terletak pada kenaikan yang digunakan untuk meningkatkan nilai akar. Walaupun kami berhasrat untuk menambah nilai 0.01, nilai sebenar yang disimpan dalam daftar titik terapung adalah sedikit berbeza dan lebih besar daripada 0.01.

Mengatasi Ralat

Untuk mengelakkan ralat titik terapung, pelbagai pendekatan boleh digunakan:

  • Menggunakan Modul Perpuluhan:
    Modul Perpuluhan dalam Python menyediakan aritmetik perpuluhan yang lebih tepat. Dengan menggantikan apungan dengan Perpuluhan dalam kod, kami mendapat hasil yang lebih tepat:
<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
Now, the function returns precise results, such as:

```
>>> sqrt(4)
Decimal('2.00')
>>> sqrt(9)
Decimal('3.00')
```
</code>
  • Menggunakan Penambahan Titik Tidak Terapung:
    Jika menggunakan modul Perpuluhan bukan pilihan, pendekatan lain ialah menggunakan nilai titik terapung yang betul-betul boleh diwakili dalam binari, seperti 1/2**J. Ini melibatkan kod yang lebih kompleks, tetapi ia memastikan kenaikan yang tepat.
  • Menggunakan Teknik Analisis Berangka:
    Analisis berangka menawarkan kaedah khusus untuk mengendalikan pengiraan matematik yang kompleks. Teknik seperti kaedah Newton boleh memberikan penghampiran punca kuasa dua yang tepat.

Atas ialah kandungan terperinci Bagaimana untuk Mengurangkan Ralat Titik Terapung dalam Python?. 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