Ujukomaarv: erinevus redaktsioonide vahel

Eemaldatud sisu Lisatud sisu
P pisitoimetamine
Telempe (arutelu | kaastöö)
copyedit
1. rida:
{{toimeta}}
'''Ujukomaarv''' või '''liikuva komaga arv'''<ref name="ReferenceAAriste">Digitaalseadmete aritmeetika ja loogika I. Ariste,A.; Loengukonspekt, Tallinna Polütehniline Instituut, Informatsioonitehnika kateeder, 95lk, TPI rotaprint, Tallinn, 1971</ref> ([[inglise keel]]es ''floating-point number'') on [[andmetüüp]], mis on loodud esitamaks väga suuri ja väga väikseid arve, mida oleks ebaotstarbekas esitada [[täisarv (andmetüüp)|täisarvudena]].
 
Ujukomaarv on paigutatav arvuti mällu kolme komponendi, [[arvu märk|märgi]], [[arvu tüvistandardkuju|arvu tüve]] ehk mantissi ja [[astendaja]] ehk eksponendiga. Ujukomaarvu väärtus avaldub korrutisena kujul <math>\text{arvu märk} \cdot \text{arvu tüvi} \cdot \text{astme alus}^\text{astendaja}</math>.<ref>[http://www.artima.com/underthehood/floating.html Floating-Point Arithmetic]</ref> Termin "ujukoma" viitab sellele, et komakoht on liigutatav – seda saab paigutada mantissi suhtes nii paremale kui vasakule.
 
Lõplikud arvud võivad olla esitatud astmealusel 2 või 10. Iga lõplik arv on kirjeldatud kolme komponendiga: ''<math>s''&nbsp;= ''\text{märk'' (0 või 1), ''}c''&nbsp;= ''[[\text{arvu tüvi]]'', ''}q''&nbsp;= ''\text{astendaja''}</math>. Lõpliku arvu väärtus on <brmath>&nbsp; (−1-1)<sup>''^s''</sup> ×\cdot ''c'' ×\cdot ''b''<sup>''^q''</supmath>, <br>kus ''b'' astmealuson (2astme või 10)alus.
Ujukomaarvu väärtus avaldub korrutisena kujul<ref>http://www.artima.com/underthehood/floating.html</ref>:
: ''arvu märk × arvu tüvi × k<sup>astendaja</sup>''
 
== Kahend-ujukomaarvud ==
Termin "ujukoma" viitab sellele, et komakoht võib ujuda – seda saab paigutada mantissi suhtes nii paremale kui vasemale.
:Standardi IEEE 754 järgi esitatakse kahend-ujukomaarv kujul <math>(-1)<sup>^s</sup>*\cdot(1.+M)*2<sup>\cdot2^{E-Bias}</supmath>, kus M on arvu tüve ehk mantissi murdosa (''fractional part'')<ref>[http://fourier.eng.hmc.edu/e85/lectures/arithmetic_html/node11.html (Katkine link)]</ref>. Arvuti mälus säilitatakse murdosa M, mitte tüvi (''significand'').
 
=== Arvu varjatud tüvenumber ===
Lõplikud arvud võivad olla esitatud astmealusel 2 või 10. Iga lõplik arv on kirjeldatud kolme komponendiga: ''s''&nbsp;= ''märk'' (0 või 1), ''c''&nbsp;= ''[[arvu tüvi]]'', ''q''&nbsp;= ''astendaja''. Lõpliku arvu väärtus on <br>&nbsp; (−1)<sup>''s''</sup> × ''c'' × ''b''<sup>''q''</sup> <br>kus ''b'' astmealus (2 või 10).
 
==Kahend-ujukomaarvud==
Standardi IEEE 754 järgi esitatakse kahend-ujukomaarv kujul
 
:(-1)<sup>s</sup>*(1.+M)*2<sup>E-Bias</sup>, kus M on arvu tüve ehk mantissi murdosa (''fractional part'')<ref>fourier.eng.hmc.edu/e85/lectures/arithmetic_html/node11.html</ref>. Arvuti mälus säilitatakse murdosa M, mitte tüvi (''significand'').
 
===Arvu varjatud tüvenumber===
Töötades kahendarvudega on arvu tüvel alati kindel arv bitte. Kuna normaliseeritud arvu kõige suurema kohakaaluga bitt on alati 1, siis seda arvuti mällu ei salvestata ja nimetatakse varjatud bitiks (''hidden bit''). Kontekstist sõltuvalt võib varjatud bitti võib arvu tüve hulka mitte arvestada. Näiteks [[IEEE 754]] topelttäpsusega (''double precision'') vorming on tavaliselt 53-bitilise tüvega, millesse on arvestatud ka "varjatud bitt" või 52-bitilise tüvega, millesse ei ole arvestatud "varjatud bitti". '''Varjatud biti''' (''hidden bit'') mõiste kehtib ainult arvu '''kahendkujule'''. IEEE 745 määrab täpsuse p, mis peab olema kirjeldatud teatud arvu tüvenumbritega, kaasaarvatud tähenduseta järgnevad bitid (st. topelttäpsusega ujukomaarvu puhul p=53).
 
Väga nullilähedasi arve, mille puhul on vajalik nullist erinev varjatud bitt (hidden bit) kutsutakse "denormaliseeritud arvudeks" (''Denormal number'') või IEEE 745 järgi "''subnormal number''" <ref>vt. [https://en.wikipedia.org/wiki/Denormal_number Denormal number (inglisekeelne Vikipeedia)]</ref><ref>[http://pages.cs.wisc.edu/~cs354-1/beyond354/reps.flpt.html Floating Point Representation]</ref><ref>[https://www.musicdsp.org/filesen/latest/_downloads/d81fc9af8a9fa63332b248772fbb4a54/denormal.pdf Denormal numbers in floating point signal processing applications]</ref>. Lahenduseks on arvu ''Bias'' <ref>[https://en.wikipedia.org/wiki/Exponent_bias Exponent bias (inglisekeelne Vikipeedia)]</ref> mahalahutamine astmenäitajast sõltuvalt esitatavast arvust.
 
== Kümnend-ujukomaaarvud ==
Kümnendarve saab esitada täpselt kümnend-ujukomaarvudega. Näiteks arvudel 1,1 või 2,2 pole täpset vastet kahend-ujukomaarvudena. Lõppkasutaja ei soovi, et 1,1 + 2,2 annaks tulemuseks 3,3000000000000003 nagu kahend-ujukomaarvude puhul. Seetõttu kasutatakse mitmete programmeerimiskeelte interpretaatorites ([[Python (programmeerimiskeel)|Python]]<ref>[https://docs.python.org/3/library/decimal.html decimal — Decimal fixed point and floating point arithmetic]</ref>, [[Java]]) ja ka mõnedes protsessorkiipides (näiteks [[IBM POWER6]]) kümnend-ujukomaarve (astmealusel 10)<ref>http[https://en.wikipedia.org/wiki/Decimal_floating_point Decimal floating point (inglisekeelne Vikipeedia)]</ref>.
 
== Normaliseeritud ujukomaarv ==
Normaliseeritud ujukomaarv on ujukomaarv, mille puhul kehtib 1 ≤ ''arvu tüvi'' < ''k'', kus ''k'' on [[arvusüsteemi alus|alus]] [[arvusüsteemile]], milles arvu esitatakse.
 
=== Kahend-ujukomaaarvu normaliseerimine ===
Tehte tulemiks võib kujuneda mittenormaliseeritud arv. Lõpptulemuse saamiseks on vajalik tulem nomraliseeridanormaliseerida. Sõltuvalt mittenormaliseeritud [[mantiss]]imantissi väärtusest toimub normaliseerimine erinevalt<ref name="ReferenceAAriste"/>:
*Kui mittenormaliseeritud mantiss > 1, siis tuleb mantissi nihutada üks koht paremale koos 1 lisamisega astmenäitajale
*Kui mittenormaliseeritud mantiss < 1/2, siis tuleb mantissi nihutada r kohta vasakule nii, et positiivsel arvul oleks pärast koma esimese koha väärtuseks 1 ja negatiivsel arvul 0. Samas tuleb astmenäitajast lahutada r.
 
== Vaata ka ==
* [[Arvu standardkuju]]
 
== Välislingid ==
 
*[http://helinurm.tpt.edu.ee/algope/m1/arvusysteemid.doc Arvusüsteemid] (.doc fail)
 
== Viited ==
{{viited}}