Denormalizált számok

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2019. április 21-én felülvizsgált verziótól ; az ellenőrzések 38 szerkesztést igényelnek .

Denormalizált számok ( eng.  denormalized numbers ) vagy szubnormális számok [1] ( eng.  subnormal numbers ) – a lebegőpontos számok egy típusa , amelyet az IEEE 754 szabvány definiál .

A számok kódolva vannak : a mantissza 0-tól kezdődik, nem 1-től (nincs implicit ), és a sorrend a lehető legkisebb. A denormált számok közelebb vannak a 0-hoz, mint a legkisebb reprezentálható normalizált szám. A gép 0  is denormalizált szám.

Lebegőpontos (egyszeres pontosságú) , dupla (kettős precíziós) formátumú írás esetén a rendelési mezőbe 0 kerül.

A 10 bájtos dupla (kiterjesztett pontosság) speciális osztályként nem tartalmaz denormalizált számokat, mivel explicit egész részbittel rendelkezik. A legkisebb sorrendű számok (a 0-s sorrend mezőjében) és a 0 egész rész bitje azonban hasonló tulajdonságokkal rendelkeznek.

. megjelenésének előfeltételei

A memória megtakarítására az úgynevezett implicit mértékegységet használjuk : a bináris szabványos számokat 1,mmm 2 ·2 k -ként írjuk fel , és a fejegységet nem őrzik meg. Ebben a formátumban lehetetlen nullát írni - ezért a gép nullája szükségszerűen valamilyen speciális szám lesz. A kényelem érdekében minimális rendelési mennyiségnek kell lennie.

Az a tény, hogy ezek a speciális számok nem csak nullák, hanem 0,mmm 2 −126 (egy 4 bájtos floatban ), további előnyt jelent: az összeadás és a kivonás nem vezet túlcsorduláshoz (az eredmény nullázásához), ha a művelet eredménye. nem pontos 0 Más szóval, a denormalizált számok bevezetésének köszönhetően a és feltételek ekvivalensek, függetlenül attól, hogy milyen közeli (a mantisszában) és kicsi ( sorrendben ) számokat vonunk ki. Denormalizált számok bevezetése nélkül egy ilyen művelet eredménye 0 lehet, még akkor is, ha a számok nem egyenlőek. Ugyanez vonatkozik az abszolút értékben közel álló, de eltérő előjelű számok összeadására is. Ez nem kívánatos lehet, például osztás nullával hibát okoz, ha az eredményt osztóként használjuk [2] .

Ezzel szemben az MK-61 számológépen 1,8 10 -99  - 1,2 10 -99 kivonása nullát ad, bár a számok nem egyenlőek.

Megvalósítási problémák

Néhány[ mi? ] processzorok és matematikai társprocesszorok denormált számokkal dolgoznak a hardverben ugyanolyan sebességgel, mint a normalizáltakkal. Más esetekben az ilyen hardveres feldolgozást nem hajtják végre (például az FPU megvalósításának bonyolításának elkerülése érdekében), és a kis értékeket azonnal nullára állítják (lásd a túlcsordulás elleni védelem ), vagy feldolgozzák az operációs rendszerben. szoftverben. A második lehetőség a denormalizált számok feldolgozási idejének növekedéséhez vezet.

A denormalizált számokat az Intel 8087 matematikai társprocesszorban valósították meg abban az időben, amikor az IEEE 754 szabvány írása folyamatban volt. Ezek voltak a javasolt alkalmazás legvitatottabb jellemzői, amelyeket végül elfogadtak [3] , de ez a megvalósítás bebizonyította, hogy a denormalizált számok hardveresen kezelhetők a gyakorlatban. A lebegőpontos modulok egyes megvalósításai nem támogatják a denormált számokat hardverben, hanem szoftveresen dolgozzák fel azokat. Bár ez a feldolgozás átlátható a felhasználó számára, előfordulhat, hogy a denormált számokat generáló vagy bemenetként fogadó számítások sokkal tovább tartanak, mint a normalizált számokkal végzett azonos számítások.

Példa egy olyan rendszerre, ahol a számábrázolási formátum nem tartalmazott denormált számokat, a ZX Spectrum .

Hátrányok

A denormalizált számok bevezetésének oka egy általánosabb számítási probléma része, amely a számok összegének korlátozott pontossággal történő meghatározását jelenti (lásd például Kahan algoritmusát ). Ráadásul a denormált számok bevezetésével megoldott probléma viszonylag szűk számtartományban – az alulcsordulási határ közelében – jelentkezik . De hasonló probléma társulhat a túlcsorduláshoz is: ha például két különböző előjelű számot akarunk összehasonlítani, amelyek sorrendje maximum, akkor a feltétel sikeresen tesztelve negatív eredményt ad, és a feltétel vezethet túlcsordulási hibára. Így általános esetben a denormalizált számok nem oldják meg a tagok permutációjától függő eredmény problémáját, és a lebegő aritmetikával való munkavégzés során a programozótól továbbra is bizonyos pontosság szükséges. Abban az esetben, ha a programozónak az alulcsordulás határán lévő számokkal kell dolgoznia , helyénvalóbbnak tűnik olyan formátumra váltani, amely szélesebb kitevő -tartományt tartalmaz , vagy speciális intézkedéseket alkalmaz a kitevő nagyságának szabályozására , mint a denormált számokra hagyatkozni. Ezenkívül emlékeznie kell arra, hogy a denormalizált számokban a mantissza kevesebb jelentős számjegye van, mint az ennél a formátumnál szokásos számjegyek, és ez jelentős pontosságvesztéssel jár.

Jegyzetek

  1. Nemnyugin S. A. Előadásjegyzetek a "Bevezetés a számítástechnikába és a programozási rendszerekbe" című tantárgyhoz, 9. előadás Számítógép-architektúra: Adattárolási formátumok. Gépi aritmetika. 5. o. Archivált : 2018. október 25. a Wayback Machine -nál
  2. William Kahan. IEEE 754R ülés jegyzőkönyve, 2002 (nem elérhető hivatkozás) . Letöltve: 2013. december 1. Az eredetiből archiválva : 2016. október 15. (Angol)    
  3. Interjú a lebegőpontos öregemberrel . Kaliforniai Egyetem, Berkeley. Letöltve: 2016. szeptember 11. Az eredetiből archiválva : 2016. április 25.  (Angol)

Linkek