Dinamik tiplashtirilgan


DECIMAL tipidagi sonlar bilan ishlash



Download 2,16 Mb.
bet44/56
Sana09.03.2022
Hajmi2,16 Mb.
#487710
1   ...   40   41   42   43   44   45   46   47   ...   56
Bog'liq
Ataxonov maruza

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,16 Mb.

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




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