Bagaimana untuk Mengurangkan Ralat Titik Terapung dalam Python?

Susan Sarandon
Lepaskan: 2024-10-21 15:08:30
asal
827 orang telah melayarinya

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

Menggunakan fungsi ini, kami menemui hasil yang mengejutkan:

>>> sqrt(4)
2.0000000000000013
>>> sqrt(9)
3.00999999999998</code>
Salin selepas log masuk

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
Salin selepas log masuk
Now, the function returns precise results, such as:

```
>>> sqrt(4)
Decimal('2.00')
>>> sqrt(9)
Decimal('3.00')
```
</code>
Salin selepas log masuk
  • 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!

sumber:php
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!