Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melakukan pengiraan perpuluhan yang tepat menggunakan Python?

Bagaimana untuk melakukan pengiraan perpuluhan yang tepat menggunakan Python?

WBOY
WBOYke hadapan
2023-08-23 15:53:082366semak imbas

Bagaimana untuk melakukan pengiraan perpuluhan yang tepat menggunakan Python?

Dalam artikel ini, kita akan belajar cara melakukan pengiraan perpuluhan yang tepat dalam Python.

Kaedah penggunaan

  • Menggunakan fungsi Perpuluhan() bagi Modul perpuluhan

  • Gunakan fungsi fsum() modul matematik

Ketidakupayaan nombor titik terapung untuk mewakili semua nombor perpuluhan dengan tepat adalah kelemahan yang terkenal. Tambahan pula, pengiraan matematik yang mudah pun boleh menghasilkan beberapa ralat. Contohnya −

Contoh

Atur cara berikut menunjukkan ketidakupayaan integer titik terapung untuk mewakili semua nombor perpuluhan dengan tepat -

x = 4.2
y = 3.1
 
# printing the sum of both the variables
print("x + y =", x + y)
 
# checking if the sum is both the variables is equal to 7.3
print((x + y) == 7.3)

Output

Apabila dilaksanakan, program di atas akan menjana output berikut -

x + y = 7.300000000000001
False

Ralat ini ialah "ciri" piawaian aritmetik IEEE 754 yang digunakan oleh CPU asas sistem dan unit titik terapungnya. Jika anda menulis kod menggunakan contoh apungan, tiada apa yang boleh anda lakukan untuk mengelakkan ralat sedemikian, kerana jenis data apungan Python menggunakan perwakilan asli untuk menyimpan data.

Menggunakan modul perpuluhan akan memberikan anda ketepatan yang lebih tinggi pada kos beberapa prestasi Mari kita lihat di bawah.

Kaedah 1: Gunakan fungsi Decimal() modul perpuluhan

Contoh

Atur cara berikut menunjukkan contoh penggunaan fungsi Decimal() untuk pengiraan perpuluhan yang tepat:

# importing Decimal from decimal module
from decimal import Decimal
x = Decimal('4.2')
y = Decimal('3.1')
# printing the sum of both the variables
print("x + y =", x + y)
# checking if the sum is both the variables is equal to 7.3 using by passing the sum to the Decimal Function
print((x + y) == Decimal('7.3'))

Output

Apabila dilaksanakan, program di atas akan menjana output berikut -

x + y = 7.3
True

Dalam kod di atas, ia mungkin berasa pelik pada mulanya bahawa nombor itu dinyatakan sebagai rentetan. Walau bagaimanapun, objek perpuluhan berfungsi sama seperti yang anda jangkakan (semua operasi matematik biasa disokong, dsb.). Apabila anda mencetaknya atau menggunakannya dalam fungsi pemformatan rentetan, ia kelihatan seperti nombor biasa.

Mengawal pelbagai aspek pengiraan, seperti bilangan digit dan kaedah pembundaran, ialah ciri utama perpuluhan.

Contoh

Untuk melakukan ini, buat konteks setempat dan ubah suai tetapannya.

# importing localcontext from decimal module
from decimal import localcontext
x = Decimal('2.3')
y = Decimal('2.7')
# dividing x by y(returns as a floating-point number)
print(x / y)
with localcontext() as context:
   # rounding the number upto 3 digits i.e, precision 3
   context.prec = 3
   # Dividing x by y with precision set to 3
   print(x / y)

Output

Apabila dilaksanakan, program di atas akan menjana output berikut -

0.8518518518518518518518518519
0.852

Tingkatkan nilai ketepatan kepada '60' untuk ketepatan yang lebih baik

Contoh

# importing localcontext from decimal module
import decimal
from decimal import localcontext
x = decimal.Decimal('2.3')
y = decimal.Decimal('2.7')
# dividing x by y(returns as a floating-point number)
print(x / y)
with localcontext() as context:
   # Rounding the number upto 60 digits i.e, precision 60
   context.prec = 60
   # Dividing x by y with precision set to 3
   print(x / y)

Output

Apabila dilaksanakan, program di atas akan menjana output berikut -

0.8518518518518518518518518519
0.851851851851851851851851851851851851851851851851851851851852

Kaedah 2: Gunakan fungsi fsum() modul matematik

Modul perpuluhan melaksanakan "Spesifikasi Aritmetik Perpuluhan Sejagat" IBM.

Tidak perlu dikatakan, terdapat banyak pilihan penyesuaian di luar skop artikel ini.

Pemula Python mungkin tergoda untuk menggunakan modul perpuluhan untuk menyelesaikan masalah ketepatan dengan jenis data titik terapung. Tetapi anda juga perlu memahami kawasan permohonan anda. Jenis titik terapung biasa biasanya lebih biasa digunakan apabila menangani masalah saintifik atau kejuruteraan, grafik komputer atau perkara lain yang bersifat saintifik.

Sebagai contoh, beberapa elemen dalam dunia sebenar boleh diukur dengan ketepatan 17-bit yang disediakan oleh titik terapung. Oleh itu, walaupun ralat pengiraan kecil tidak mempunyai kesan. Lebih-lebih lagi, titik terapung asli juga ketara lebih pantas, yang penting untuk situasi di mana anda perlu menjalankan banyak pengiraan.

Contoh

Namun, anda tidak boleh mengelak kesilapan sepenuhnya. Banyak algoritma telah dikaji secara meluas oleh ahli matematik, dan ada yang lebih baik dalam mengendalikan ralat daripada yang lain. Selain itu, sedikit berhati-hati diperlukan kerana amalan menolak pembatalan dan menambah nombor besar dan kecil boleh membawa akibat.

inputList = [1.23e+18, 1, -1.23e+18]

# observe how the 1 disappears here if we perform sum() on the list
print(sum(inputList)) 

Output

Apabila dilaksanakan, program di atas akan menghasilkan output berikut −

0.0
Fungsi

fsum() digunakan untuk mencari jumlah antara julat tertentu atau objek boleh lelar. Ia memerlukan pengimportan perpustakaan matematik. Ia digunakan secara meluas dalam pengiraan matematik.

Tatabahasa

Berikut ialah sintaks fungsi tersebut.

maths.fsum( iterable )

Objek boleh lelar boleh jadi julat, tatasusunan atau senarai.

Jenis pemulangan -

Ia mengembalikan nombor titik terapung.

Contoh

Contoh berikut boleh digunakan untuk pelaksanaan yang lebih tepat dalam math.fsum() -

# importing math module 
import math
# input list
inputList = [1.23e+18, 1, -1.23e+18]
# adding the sum of elements of the list using the fsum() function
print(math.fsum(inputList))

Output

Apabila dilaksanakan, program di atas akan menjana output berikut -

1.0

Sebaliknya, anda sebenarnya perlu mengkaji dan memahami sifat penyebaran ralat algoritma lain.

Namun begitu, program yang berkaitan dengan topik seperti kewangan adalah tempat modul perpuluhan paling kerap digunakan. Adalah sangat tidak menyenangkan apabila ketidaktepatan kecil muncul dalam pengiraan sistem ini.

Oleh itu, modul perpuluhan menyediakan cara untuk mengelakkan situasi ini. Objek perpuluhan sering ditemui semula apabila Python berinteraksi dengan pangkalan data, terutamanya apabila mengakses data kewangan.

Kesimpulan

Kami mengetahui dalam artikel ini bahawa terdapat situasi tertentu di mana pengiraan biasa gagal, jadi kami memerlukan pengiraan perpuluhan yang betul. Kami belajar cara melakukan pengiraan perpuluhan yang tepat menggunakan dua fungsi berasingan, perpuluhan() dan fsum(). Kami juga mempelajari cara menggunakan fungsi localcontext() untuk menetapkan ketepatan keputusan.

Atas ialah kandungan terperinci Bagaimana untuk melakukan pengiraan perpuluhan yang tepat menggunakan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam