Dinamik tiplashtirilgan


DECIMAL tipidagi sonlar bilan ishlash



Download 2,94 Mb.
bet44/77
Sana06.10.2022
Hajmi2,94 Mb.
#851613
1   ...   40   41   42   43   44   45   46   47   ...   77
Bog'liq
Dinamik

DECIMAL tipidagi sonlar bilan ishlash

Koʻpincha float tipidagi sonlar bilan ishlaganda, ularni ikkilik sanoq sistemasida ifodalash bilan bogʻliq muammolar yuzaga kelib qoladi. Masalan, 4.5 soni bunday ifodalashdan keyin 4.4444444444444495 yoki 4.5000000000000012 shaklini olishi mumkin. Tabiiyki, bu hol ular ustida amal bajarish natijasida hatolik yanada ortib ketishi yoki taqqoslash natijalarining notoʻgʻri boʻlishiga olib keladi. Bunday muammolarning oldini olish uchun Python dasturlash tilida decimal klassi nazarda tutilgan.


Decimal tipidagi sonlarni quyidagicha koʻrinishlardan birida yozish mumkin:
Decimal('12045') # butun sonlar
Decimal('1.23') # haqiqiy sonlar
Decimal('1.1e2'), Decimal('-1.1E2') # eksponentsial shaklda :
Decimal('NaN') # son emas
Decimal('Infinity'), Decimal('-Infinity') # cheksiz
Decimal('\uff19') # yunikodda
Bu klass metodlari haqiqiy sonlar ustida berilgan aniqlikdagi hisoblashlarni bajarishga imkon beradi.
from decimal import *
print((Decimal('3.3') + Decimal('4.4'))==7.7)
print((3.3+4.4)==7.7)

Shu sababli, ayniqsa bank amaliyoti bilan bogʻliq ilovalarda float tipidagi sonlar bilan murakkab hisoblanadi. Qolaversa, haqiqiy sonlarning ishonchli raqamlarini ifodalashga zarurat paydo boʻlishi mumkin. Quyidagi namunaga e`tibor bering:
print(1.500 + 1.500)
print(Decimal('1.500') + Decimal('1.500'))

Shuni ta’kidlash joizki, float tipidagi sonlar fiksirlangan aniqlikka ega, Decimal tipidagi sonlar uchun aniqlikni oʻrnatish imkoniyati mavjud:
print('float : ',7**0.5)
getcontext().prec = 50
print('decimal : ', Decimal(7).sqrt())

Bundan tashqari, decimal moduli shunchaki raqamlar sonini belgilash emas, balki oʻrnatilgan muvozanat buziladigan holatlarni ham tutib qolishga imkon beradi va uchta tushunchaga asoslanadi: oʻnli son, hisoblashlar konteksti va signallar.
Decimal modulida oʻnli sonlar ma’lumotlarning oʻzgarmas tipiga mansub boʻladi, ya’ni ularni toʻgʻridan‑toʻgʻri oʻzgartirib boʻlmaydi. Bu sonlar ishoraga, mantissa va eksponenta ega boʻlishi mumkin. Oxirida turgan nollar tashlab yuborilmaydi, −0 va +0 sonlar bir‑biridan farqli hisoblanadi.
Hisoblash konteksti oʻz ichiga aniqlik, yahlitlash qoidalari, eksponentaga chegaralar, amal natijalari uchun bayroqlar va istisnoli vaziyatlarni faollashtirish vositalarini oladi.
Signallar – bu hisoblash jarayonida yuzaga kelishi mumkin mahsus vaziyatlardan iborat istisnoli yoki axborot beruvchi xarakteriga ega boʻladi, zarur hollarda inkor qilinishi mumkin. Har bir signal uchun alohida bayroq hamda tutib qolish aktivatori mavjud. Agar aktivatorda 1 koʻrsatilgan boʻlsa, istisnoli vaziyatga murojaat qilinadi.
Modulni faollashtirish uchun quyidagi koʻrsatmadan foydalaniladi:
from decimal import *
Bu modulda joriy kontekstni koʻrish uchun getcontext() metodidan foydalanish mumkin:
>>> getcontext()

Bu yerda prec parametri oʻnli son raqamlari sonini koʻrsatadi. Bu miqdor toʻgʻridan‑toʻgʻri 28 ga teng. Zarur hollarda bu miqdorni oʻzgartirish mumkin. Masalan: getcontext().prec = 22. SHundan soʻng, oʻnli sonlar 22 ta raqam orqali ifodalanadi.
Agar float tipidagi sonlarni Decimal ga oʻzgartirishga toʻgʻri kelganda, bu son ikkilik sanoq sistemasiga oʻtkaziladi va bu natija qiymat sifatida qabul qilinadi. Float tipidagi sonlarni Decimal dagi koʻrinishidagi soʻnggi raqamlar ana shu holatga ishora qiladi. Prec ning qiymati ishonchli raqamlar sonini oʻzgartirmaydi, ammo arifmetik amallar bajarilganidan soʻng, bu son albatta hisobga olinadi:
getcontext().prec = 5
print('Decimal :', Decimal('1.350000'))
x=Decimal(1.350000)
print('float dan Decimal ga: ', x)

Download 2,94 Mb.

Do'stlaringiz bilan baham:
1   ...   40   41   42   43   44   45   46   47   ...   77




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish