Murdarvud

Murdarvud on vajalikud mitmesuguste probleemide lahendamisel. Programmeerimiskeel C tunneb vaid kümnendmurde. Murdarvud salvestatakse arvutis koprotsessori (x87) formaadis. See on määratud IEEE (s.o. Institute of Electronics and Electrical Engineering) formaatidega nr. 754 ja 845. Selle kohaselt võivad arvud omada formaati: float (4 baiti), double (8 baiti) ja long double (10 baiti). Iga murdarv jagatakse mantissiks ja astmenäitajaks. Mõlemad omavad märki (+ või -). Enne salvestamist arv normeeritakse. Näiteks 123.456 --> 1.23456 * 102. Seega on antud arvu astmenäitaja 2. Astmele liidetakse enne salvestamist mingi kindel konstant (bias), et kõik astmed oleksid positiivsed. Suurimale negatiivsele astmele vastab järelikult konstant 1. Üldiselt vastab igale positiivsele astmele aste + bias. Nimetatud konstant ehk bias on iga formaadi puhul erinev:


Murdarvu tüübi nimi Suurus baitides Piirkond
float 4 3.4 x 10-38 kuni 3.4 x 1038
double 8 1.7 x 10-308 kuni 1.7 x 10308
long double 10 3.4 x 10-4932 kuni 3.4 x 104932

Tabel 4: Murdarvude tüübid


Tänu astmete kasutamisele saab kümnendmurru kujul salvestada suuremaid arve kui täisarvu kujul ja tänu murdarvulisele osale ka suurema täpsusega. Paraku on ka murdarvud piiratud ja peale selle ei ole nende hulk arvteljel pidev, vaid sisaldab vastavalt tüübile suuremaid või väiksemaid auke. See on tingitud mantissi piiratusest. Tüüp float suudab salvestada seitsme-, double viieteistkümne- ja long double üheksateistkohalisi arve. Viimane tüüp on ette nähtud matemaatikaprotsessori 80x87 jaoks. Programmeerimiskeel C sisaldab murdarvude jaoks teeke paljude funktsioonidega nagu näiteks sin(), cos(), tan() jne. Matemaatikaprotsessor oskab neid funktsioone ka iseseisvalt lahendada. Kui seda protsessorit ei ole, siis on võimalik vastavaid funktsioonie lahendada ka põhiprotsessori abil, mis aga teeb seda sadu kordi aeglasemalt. Kui teil on matemaatikaprotsessor, siis kasutage teda kindlasti. Selleks on vaid vaja translaatorile selle protsessori olemasolust teatada. Borland C keskkonna puhul on võimalus menüü Options | Compiler | Advanced Code Generation abil ekraanile ilmunud dialoogis valida emulation (matemaatiliste funktsioonide lahendamine põhiprotsessori abil) ja 80x87 (matemaatikaprotsessori kasutamine) vahel. Matemaatikaprotsessori kasutamine ei nõua programmis mingeid muudatusi. Kui te olete transleerinud oma programmi nii, et ta kasutaks matemaatikaprotsessorit, siis ei suuda too programm enam töötada, arvutitel, mis sellist protsessorit ei oma. Sellisel juhul tuleks programm uuesti transleerida ilma matemaatikaprotsessori kasutamiseta.