Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengatasi Perangkap dalam Aritmetik Titik Terapung untuk Pengiraan Tepat?

Bagaimana untuk Mengatasi Perangkap dalam Aritmetik Titik Terapung untuk Pengiraan Tepat?

DDD
DDDasal
2024-10-21 14:53:02564semak imbas

How to Overcome Pitfalls in Floating Point Arithmetic for Accurate Calculations?

Perangkap Aritmetik Titik Terapung: Cara Mengatasinya

Aritmetik titik terapung berasaskan perpuluhan, yang biasa digunakan dalam bahasa pengaturcaraan seperti Python, boleh memperkenalkan ralat halus kerana sifat anggarannya. Memahami ralat ini adalah penting untuk pengiraan yang tepat.

Isunya

Pertimbangkan fungsi Python berikut untuk menganggar punca kuasa dua menggunakan penambahan titik terapung:

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

Fungsi ini, walau bagaimanapun, menghasilkan hasil yang tidak tepat:

<code class="python">>>> sqrt(4)
2.0000000000000013
>>> sqrt(9)
3.00999999999998</code>

Masalah dengan Titik Terapung

Isunya terletak pada fakta bahawa nilai titik terapung Python bukan perwakilan tepat nombor perpuluhan. Sebaliknya, mereka menggunakan perwakilan binari, yang boleh menyebabkan ketidaktepatan apabila berurusan dengan nombor yang tidak boleh diwakili dengan tepat dalam bentuk binari.

Dalam fungsi contoh, penambahan 0.01 tidak bersamaan dengan menambah 1/100 disebabkan oleh perwakilan anggaran ini. Nilai ditambah sebenar adalah lebih besar sedikit daripada 1/100, membawa kepada sedikit anggaran berlebihan.

Mengatasi Ralat Titik Terapung

Untuk mengelakkan ralat ini, pertimbangkan strategi berikut:

  • Gunakan Modul Perpuluhan:

Modul perpuluhan Python menyediakan jenis alternatif, Perpuluhan, yang menggunakan perwakilan titik tetap berdasarkan perpuluhan. Ini menawarkan pengiraan yang lebih tepat, seperti yang dilihat dalam fungsi yang diubah suai:

<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</code>
  • Gunakan Nilai Boleh Diwakili Perduaan:

Berpegang pada titik terapung penambahan yang mewakili pecahan perduaan tepat, seperti 0.125 (1/8) atau 0.0625 (1/16). Ini memastikan bahawa penambahan adalah tepat tanpa memperkenalkan ralat pembundaran.

Memahami dan mengatasi ralat titik terapung adalah penting untuk pengiraan berangka yang tepat. Dengan menggunakan strategi yang sesuai, pembangun boleh meminimumkan ralat ini dan mencapai hasil yang lebih tepat.

Atas ialah kandungan terperinci Bagaimana untuk Mengatasi Perangkap dalam Aritmetik Titik Terapung untuk Pengiraan Tepat?. 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