Juda ham katta sonlar bilan ishlash 8 mavzu



Download 5,79 Mb.
bet7/7
Sana14.07.2022
Hajmi5,79 Mb.
#796574
1   2   3   4   5   6   7
Bog'liq
Ko3qDGRlNMCvobXcWi5vGmdrWoZV2FMK2EstZftB

Diapozoni
  • 1
  • int
  • 4
  • signed
  • [−2 147 483 648, 2 147 483 647]
  • 2
  • Unsigned int
  • 4
  • Unsigned
  • [0, 4 294 967 295]
  • 3
  • __int8
  • 1
  • char
  • [-128, 127]
  • 4
  • unsigned __int8
  • 1
  • Unsigned char
  • [0, 255]
  • 5
  • __int16
  • 2
  • Short
  • [−32 768, 32 767]
  • 6
  • unsigned __int16
  • 2
  • [ 0, 65 535]
  • 7
  • __int32
  • 4
  • [−2 147 483 648, 2 147 483 647]
  • 8
  • unsigned __int32
  • 4
  • [0, 4 294 967 295]
  • 9
  • __int64
  • 8
  • Long
  • [−9 223 372 036 854 775 808, 9 223 372 036 854 775 807]
  • 10
  • unsigned __int64
  • 8
  • [0, 18 446 744 073 709 551 615]
  • 11
  • bool
  • 1
  • [false] yoki [true]
  • 12
  • char
  • 1
  •  
  • [-128,127]
  • 13
  • char
  • 1
  •  
  • [-128 , 127]
  • 14
  • unsigned char
  • 1
  •  
  • [0, 255]
  • 15
  • short
  • 2
  • [−32 768, 32 767]
  • 16
  • unsigned short
  • 2
  • unsigned short int
  • [0, 65 535]
  • 17
  • long
  • 4
  • long int
  • [−2 147 483 648, 2 147 483 647]
  • 18
  • unsigned long
  • 4
  • unsigned long int
  • [0, 4 294 967 295]
  • 19
  • long long
  • 8
  • __int64
  • [−9 223 372 036 854 775 808, 9 223 372 036 854 775 807]
  • 20
  • unsigned long long
  • 8
  • __int64
  • [0, 18 446 744 073 709 551 615]
  • 21
  • enum
  • null
  •  
  • 22
  • float
  • 4
  •  
  • [3,4E +/- 38 (7 belgi)]
  • 23
  • double
  • 8
  •  
  • [1,7E +/- 308 (15 belgi)]
  • 24
  • long double
  • 8
  •  
  • [1,7E +/- 308 (15 belgi)]
  • 25
  • wchar_t
  • 2
  • __wchar_t
  • [0, 65 535]
  • Tiplar va ularning xususiyatlari.

Juda ham katta sonlar bilan ishlash.

  • Texnikaining rivojlanishi dasturlash tillarida keng yondashuvlarni amalga oshirishga sabab bo‘lmoqda. Masalan, tiplarning diopazonini bilish uchun ikki darajasiga karrali qilib tuzib chiqmoqdalar. Bu juda oson. Bu yuqoridagi jadvaldan ham ko‘rish mumkin.
  • Ammo bunday katta sonlar bilan ishlashni C++ standartining o‘zi to‘liq qo‘llab quvvatlamaydi. Bunga ikkita misol keltiramiz.
  • Tiplarning ichida eng kattasi bu long tipidir, uning ikkilanganlili long long eng kattasi bo‘lishi mumkin, ammo bulardan foydalanish uchun __int64 tipi ham yaratilganki bulardan foydalanish qulaydir. Yuqoridagi jadvaldan bu ko‘rishimiz ham, o‘zimiz dastur yozib tekshirishimiz ham mumkin. Odatda dasturchilar quyidagicha fragmentlardan foydalanishadi:

Juda ham katta sonlar bilan ishlash.

  • Agar dasturga 20 xonali sonnni (< ULLONG_MAX)kiritsangiz xato ishlaydi. Nima sababdan, sanoq sistemaning xatosini ko‘rish mumkin. Shuningdek, ikkining 64 darajasi nechaga teng? Albbata ULLONG_MAX ga tengdir. Endi yana bir gibrid tip kiritamiz, long double va bu orqali 264 darajasini hisoblaymiz.

Juda ham katta sonlar bilan ishlash.

  • Dastur fragmentini ishlatib, natijaning oxirgi 4ta xonasiga e’tibor bering. Tiplar kombinatsiyalarni yordamida katta sonlar xatoli bo‘lganligi uchun amaliy matematikaning turli masallarini yechganda aniq nechta xona aniqligi oldindan belgilab olinadi. Masalan, quyidagi dasturga qarang. Tiplarga bog‘liq katta sonlardan foydalanish
  • 1- test:{ son kirit: 2
  • darajasini kirit:50
  • 1125899906842624}
  • Output
  • 2- test:{son kirit: 272
  • darajasini kirit:37
  • 1199635887284640700000000000000000000000000000000000000000000000000000000000000000000000000}

Juda ham katta sonlar bilan ishlash.

  • Dastur ixtiyoriy sonning ixtiyoriy darajasini hisoblash uchun mo‘ljallangan, ammo hammasining oxirgi raqamlariga e’tibor bersangiz, 0 lar bilan to‘ldirilgan. Bu esa yana bir bor hisoblashda sanoq sistemasining xatoligini ko‘rsatadi.
  • Xulosa shundan iborat bo‘ladiki, 20 xonagacha yaxshi xisoblash amalga oshirilishi mumkin, ammo bu xonadan boshlab xatoliklarni nazorat qilib bo‘lmaydi.
  • Katta sonlar bilan ishlaganda, yondashuvni boshqacha amalga oshirish mumkin, masalan oqimdan kiruvchi raqamlarni massiv elementlar deb qarab uni ustida mustaqil arifmetik amallarni bajarish mumkin.
  • Har bir arifmetik amalni oldindan C++da amalga oshirish dastur fragmentini yozib, alohida ko‘rib chiqish mumkin. Avvalo, cheksiz uzoq raqamni faqat dinamik massiv sifatida ifodalash mumkinligini tushunishingiz kerak. Lekin raqamlari dinamik massiv sifatida taqdim etilsa ham, ba’zi cheklovlar bo‘ladi. Masalan, bunday sonning (massivning) uzunligi kompyuter xotirasi miqdori bilan chegaralangan bo‘ladi. Shuni ham tushunish kerakki, qo‘shish va ayirish amallaridan foydalanishda natija operandlarga qaraganda kompyuter xotirasida ko‘proq joy egallaydi.

Large Integer sinfining qo‘llanilishi.

  • Ko‘p sonli hisoblashlar standart ma’lumot turlarining cheklanishidan tashqariga chiqish, cheksiz katta sonlar bilan ishlash, hajmi faqat mashinaning hisoblash kuchi bilan cheklanadi. Bunga qanday erishish mumkin? Eng mantiqiy yo‘li massiv yozish va standart tip raqamlar izchil massiv uchun maxsus tarzda aylantirish.
  • Misol uchun, 123456789123456789 raqamini qanday saqlashingiz mumkin, u int tipiga mos kelmaydi. Uni qo‘yish uchun, int tipidagi massiv olish mumkin, arr[0] = 123456, arr[1] = 789123, arr[2] = 456789, bunday yozishni maxsus usullari deb bo‘ladi. Shuningdek, to‘g‘ri kiritilsa, qo‘shish, ayirish, ko‘paytirish va bo‘lish amallarini yozish mumkin.
  • Endi maxsus Bignumber sinfini amalga oshirishni boshlaymiz va qo‘shish, ayirish uchun. Bu sinf bilanishlashda izohlar bilan dastur fragmentini to‘liq keltirilgan. Dastur fragmentiga qarab izohlarni o‘qishingiz mumkin.
  • Katta sonni initsializasiya qilish. Quyidagicha kiritish ishlari sifatida Bignumber(string str) sinf konstruktori mavjud. Satrning oxiridan boshlab joriy uzunlikdagi substringlar tanlanadi, raqamlarga aylantiriladi va qismlar vektoriga beriladi. Satrda manfiy ishora bor-yo‘qligiga qarab sinfning boshqa xususiy sohasi initsializatsiya qilinadi. Ba’zan normallashtirishda ziddiyatlar bo‘lmasligi uchun sinfning barcha ob’ektlari uchun bir xil bo‘lgan statik doimiy maydon ishlatiladi.

Large Integer sinfining qo‘llanilishi.

  • Katta sonlarni qo‘shish. + operatorini qayta yuklaymiz, bu esa o‘z navbatida ikkita katta sonni qo‘shadigan _plus() usulini chaqiradi. Bundan tashqari, har ikki raqamlar qismlarini, massiv bir xil hajmli qilish kerak. Bundan keyin esa natijani _normalization() funksiyasi bilan normallashtiring.
  • Katta sonlarni ayirish. Chiqarish qo‘shish uchun xuddi shunday ishlaydi, — operatori qayta yuklanadi va _minus () usulidan foydalaniladi.
  • Katta son oqimga chiqarish. Chiqish << operatorini qayta yuklashdan kelib chiqadi, lekin chiqishning o‘zidan oldin sonni _normalization() funksiyasi normallashtirishi kerak. U barcha nol bo‘laklarni, bo‘laklardagi manfiy sonlarni tozalab, sonni oqimga berishi kerak.
  • Sinfning dastur fragmentini keltiramiz, unda izohla bilan yozilgan:

Large Integer sinfining qo‘llanilishi.Misol:

Large Integer sinfining qo‘llanilishi.Misol:

Large Integer sinfining qo‘llanilishi.Misol:

BigNumber sinfidan foydalanish

  • SAIDOV SAMANDAR MUZAFFAROVICH
  • Informatika asoslari kafedrasi assistenti
  • E’TIBORINGIZ UCHUN RAXMAT!

Download 5,79 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7




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