Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
55
Umumiy tillar uchun ko‘p kompilyatorlar Aslida foydalanish, ba’zi arifmetik
operatorlar matematik Assotsiativ ligi faktidan,qaysiki associative qoidalari faqat
o‘z ichiga olgan ifoda qiymati hech qanday ta’sir ko‘rsatmaydi, foydalanadi. Misol
uchun, qo‘shish matematik assotsiativ bo‘ladi, shuning uchun, matematikada ifoda
A + B + S
operator baholash tartibi bog‘liq emas. Floating-point amallarida bo‘lsa
matematik Birlashtiruvchi operatsiyalar ham associativ edi, kompilyator ba’zi oddiy
cheklovlarni bajarish uchun bu faktlardan foydalanishi mumkin. Xususan, agar
kompilyatorga operatorlari qayta baho tartiblashtirish uchun ruxsat etilsa, u ifodani
baholash uchun bir oz tezroq kodni ishlab chiqarishi mumkin. Kompilyatorlar tez-tez
bu turdagi optimallashtirishni amalga oshiradi.
Afsuski, kompyuterda, har ikkila haqiqiy son (1.356885985864448)
ko‘rinishlari
va
arifmetik
operatsiyalari,
ularning
matematikadagi
shu
tushunchalarning faqat taxminaniy yaxlitlanganligidir (chunki hajmi cheklashlar).
matematik
operator
associative
ekanliginifloating
point
operationlari
assotsiativligini anglatmaydi. Aslida, faqat agar hamma operandlar va oraliq
natijalari aniq floating-point da namoyish qilinsa jarayon aniqroq (associativ)
biriktirilishi mumkin. Misol uchun, kompyuterda integer kiritilgan assotsiativ
bolmaydigan patologik holatlar bor. Masalan, faraz qiling dastur ifodani baholash
kerak,
A + B + S + D
va
A va
S juda katta musbat raqamlar, va
B va
D manfiy raqamlar juda katta
absolut qimatdagi. Bu vaziyatda,
A B qo‘shish oshib ketish xatosini chiqarmaydi,
lekin
A S qo‘shishda boladi xato . Xuddi shu tarzda,
S B qo‘shish toshib ketish
xatosini chiqarmaydi, lekin
B D qo‘shishda boladi. Kompyuter arifmetik cheklanishi
sabab, qo‘shish bu holatda esa fojiali nonassociative hisoblanadi. Shuning uchun
agar Kompilyator bu qo‘shish operatsiyalarni qaytadan joylashtirsa ,bu ifoda
qiymatiga ta’sir qiladi. Bu muammo, albatta, dasturchi tomonidan oldini olinishi
mumkin ,o‘zgaruvchilar taxminiy qiymatlarini ma’lum holda. Dasturchi, (ikki belgilash
jadvaldagi ham) ifodani ikki qismdan ko‘rsatish mumkin, toshib ketishni oldini
olishni ta’minlab. Ammo, bu holat ancha nozik yo‘llar bilan yuzaga chiqishi mumkin,
unda dasturchi tartibini farq qilish uchun kamroq imkoniyat bo‘ladi.