Davronbek | SWE πŸͺ
794 subscribers
587 photos
113 videos
66 files
452 links
SWE: Python | Go | VueJs

- Loyihalardagi xatoliklar va ularni xal qilishdagi ba'zi tavsiyalarni yozib boraman.

Don't be shy, say hi πŸ‘‹ | @firdavs_dev | https://davronbek.dev
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
πŸ€·β€β™‚4⚑2😁1🀝1