Davronbek SWE πŸͺ
917 subscribers
579 photos
113 videos
66 files
447 links
- Loyihalardagi xatoliklar va ularni xal qilishdagi ba'zi tavsiyalarni ulashib boraman.

Don't be shy, say hi πŸ‘‹ | @firdavs_dev | davronbekdev.uz
Download Telegram
Forwarded from Shukhrat Utaboev | Blog
To'g'ri javob yo'q, if ichidagi kod ishlamaydi.

Bunga asosiy sabab barcha dasturlash tillarida hisob kitoblar binary holatda amalga oshiriladi. Masalan 6 soni 110 (ya'ni 0*2^0 + 1*2^1 + 1*2^2) ko'rinishida bo'ladi va shu ko'rinishdaligida ustida amallar bajariladi.

Yuqoridagi holatni endi ko'rib chiqamiz. Decimal sonlarni binary ko'rinishga o'tkazish unchalik ham murakkab emas. Buni google orqali tezda tushinib olishingiz mumkin.

0.2 = 0.00110011001100110011...

0.3 = 0.01001100110011001100...

Ikkala chiqqan binary sonlarni qo'shamiz.

0.00110011001100110011...
+ 0.01001100110011001100...
= 0.01111111111111111111...

0.5 ni ham binaryga o'tkazsak 0.1 qiymat olamiz.

0.1 > 0.01111111111111111111... .

Ko'rib turganimizdek 0.5 ning qiymati 0.2 + 0.3 nikidan juda kam miqdorda katta.

Orqaga qaytamiz. 0.1 ni decimalga o'zgartiramiz 0*2^0 + 1*2^-1 = 0.5.

0.011111111111111... ni qaytarsak 0*2^0 + 0*2^-1 + 1*2^-2 + 1*2^-3 + 1*2^-4 + 1*2^-5 + ... - "natija"si 0.5 ga teng cheksiz kamayuvchi geometrik progressiya. Kompyuterda esa cheksiz degan tushuncha yo'q, o'zgaruvchiga hotirada qancha joy ajratilgan bo'lsa shuncha aniqlikda hisoblaydi. Misol tariqasida verguldan keyingi 20ta raqam hotiraga sig'di deb hisoblasak 0.01111111111111111111 ni decimalga aylantiramiz, natija esa 0.499999046 chiqadi (aslida bundan ancha aniq ishlaydi).

0.5 β‰  0.499999046

Bu holat floating point error deb ataladi.

Shu yergacha kelgan bo'lsangiz yana bitta savol 0.2 + 0.3 == 0.1 + 0.4 ning natijasi nima bo'ladi?

#math

@shukhratutaboev