Dalam artikel ini, kita akan belajar cara melakukan pengiraan perpuluhan yang tepat dalam Python.
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 −
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)
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.
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'))
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.
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)
Apabila dilaksanakan, program di atas akan menjana output berikut -
0.8518518518518518518518518519 0.852
# 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)
Apabila dilaksanakan, program di atas akan menjana output berikut -
0.8518518518518518518518518519 0.851851851851851851851851851851851851851851851851851851851852
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.
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))
Apabila dilaksanakan, program di atas akan menghasilkan output berikut −
0.0
fsum() digunakan untuk mencari jumlah antara julat tertentu atau objek boleh lelar. Ia memerlukan pengimportan perpustakaan matematik. Ia digunakan secara meluas dalam pengiraan matematik.
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 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))
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.
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!