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

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

DDD
Lepaskan: 2024-10-21 14:53:02
asal
673 orang telah melayarinya

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

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

<code class="python">>>> sqrt(4)
2.0000000000000013
>>> sqrt(9)
3.00999999999998</code>
Salin selepas log masuk

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

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan