Nemzetközi szabvány ábrázolása lebegőpontos számok egy számítógépes
Szinte minden olyan programozási nyelv lehetővé teszi, hogy használja a számítások tört számok. Amikor a program végrehajtása numerikus módszerek, vagy bármely más számítógépes számítások szerint a legfontosabb kérdés a belső számok ábrázolása, amely a munka a programozó. Ebből elsősorban attól függ, pontosabb számításokat, valamint a sebességet.
Lebegőpontos számok
Lebegőpontos számok - közös képviseleti forma a valós számok a számítógépen. A fő paraméterek ezen formája képviselet az alapja a teljesítmény (bázis) és pontosság (pontosság). Ebben az esetben mindig megköveteli, hogy az alapszint egy egész páros szám. Ha a szám 0,1 ábrázoljuk. Ugyanakkor nyilvánvaló, hogy bizonyos paraméterek, néhány szám nem tud jelen lenni, az biztos. Például, és az azonos számú, körülbelül 0,1 képviseli formájában (mint a bináris ábrázolása száma 0,1 van egy végtelenített formában).
Általában, ha adott paraméterek számát jelenti rekord típus
Ha ez a szám az úgynevezett mantissza áll pozíciókat. A jövőben, egy lebegőpontos szám, meg fogjuk érteni a valós számok képviselteti pontosan abban az értelemben, ebben a formában.
Van még két másik fontos paraméter - a legnagyobb és a legkisebb kitevők $ „/> és” />. Így a rögzített paraméterek, el tudjuk képzelni -e_ + 1 \ right) \ beta ^ p $ „/> másik szám, figyelembe véve a jel.
Bemutatjuk másik megállapodást. Eddig a képviseletét lebegőpontos nem egyedi. Például 0,1 és a szám is képviselteti magát, és hogyan. Képviselete a számot a vezető pozíciókat, amely áll a szám nullától eltérő, hívjuk normalizálódott. A standardizált formák megoldja azt a problémát, nem egyediségét ábrázolása lebegőpontos számok. (Ez az elrendezés azonban felvet egy érdekes kérdés - hogyan lehet 0?)
gép epszilon
Mint ismeretes, kétféle számítási hibák - abszolút és relatív (számítási hibák). Alatt a relatív hiba az aránya
ahol - a kapott érték kerekítés, és - kiszámítjuk a pontos érték.
Képzeljük el, hogy a kerekítés miatt a valós szám száma volt. Legrosszabb esetben kerekítés megfelel az abszolút hiba egyenlő hol. Az eredmény mantissza kerekítés helyzetbe. A mantissza abszolút helyzetének a hiba.
Amikor megpróbál írni egy egyenlőtlenséget a relatív hiba megfelel a fenti abszolút hiba, akkor könnyű eljutni
Az érték „/> nevezett Epsilon gép (gépi epszilon). Így azt lehet mondani, hogy ha a kerekítés törtszám ahhoz legközelebb úszó relatív kerekítési hiba nem haladja meg a gép epszilon.
Van egy másik definíció. A gép epszilon lehet meghatározni, mint az a legkisebb pozitív szám, adjuk hozzá a készüléket ad kiváló eredményt egységét. Meg az olvasó, hogy ellenőrizze a egyenértékűségét a definíciók a saját.
Az IEEE szabvány
Két különböző szabványos IEEE lebegőpontos számok. IEEE 754 - bináris szabvány előírja, hogy egy egyszeres pontosságú (single) és dupla pontosságú (dupla). Szintén a IEEE 754 szabvány pontosan tárgyalt Felhasználás bit a számok ábrázolása egy- és kétszeres pontosságú. Az IEEE 854 lehet állítani, hogy a 10. vagy 2. Ugyancsak nem szól a megoszlása közötti bitek a mantissza és mértéke.
A koncepció a IEEE szabványt használjuk, hogy kijelölje a sajátságait mindkét szabványoknak.
A alapszint
A választás a mértéke 10 alap nem igényel különleges magyarázatot. Tizedes rendszer - a rendszer ismerős az emberre. Abban az esetben bináris rendszer szükséges megvitatják a méltóság velejárói. Megegyeztünk, hogy egy normalizált számok formájában. Ha a vezető pozícióban csak 1. Ez lehetővé teszi számunkra, hogy ne tárolja a készüléket a memóriában, és így kap egy extra bit mantissza. Ebben az esetben, azt mondják, hogy a szabvány egy rejtett bit (rejtett bit).
Térjünk vissza a kérdésre, hogy a képviselet nulla, akkor a normalizált formában. Zéró megfelel a nulla fokos és a mantissza -1 „/>. Így nulla van ábrázolva.
pontosság
Az IEEE szabvány 4 különböző pontosság: egyetlen (single), dupla (kettős), egyszeres hosszabb (egy kibővített) és a kettős kiterjesztése (kettős kiterjesztett). IEEE 754 mereven tárgyalni a bitek száma egy- és kétágyas pontossággal. Ez azt jelenti, hogy az összes számítógép IEEE 754, a bitek száma a számok ábrázolása egy egyszeres pontosságú és dupla pontosságú rögzített. Bites kiterjesztett pontosságú szám nem mereven. Továbbfejlesztett formátumok vannak kialakítva, hogy növelje a kicsit a mantissza és a kitevő. Az alábbi táblázat mutatja a paramétereket a különböző pontosságot IEEE szabvány.
Képzeljük el, hogy van egy program. Bár ebben a programban dolgozik egy ideig próbálta kivonat a gyökér -4. Ha a szabvány nem rendelkezik felesleges értékek és az összes bit szekvenciák kifejezésére a megfelelő számot, majd nem lenne kiadási jobban, mint hogy hagyja abba a munkát a program hibaüzenettel.
Ilyen esetekben az IEEE szabvány, vannak speciális értékek.
NaN (nem szám) által használt szabványos IEEE kezelési helyzetek faj kitermelése gyökere negatív szám.
Adunk egy kis táblázatot az esetek NaN vissza.
Operations hogy visszatérjen NaN
Az esetben, ha van egy NaN
A NaN nincs megadva kicsit képviselet, milyen értéket kell venni a mantissza. Az egyetlen korlátozás - ez nem lehet nulla. Ezt a tényt az átvitelhez használt egyes rendszer információ a mantissza. Így sok különböző NaN értékek - minden az ő esetében.
Tegyük fel, hogy az A értékét egy kifejezés, például. Tegyük fel, hogy az értéke NaN. Ebben az esetben, a teljes kifejezés értéke is egyenlő NaN. Ha figyelembe vesszük a hosszú távú, a számítás, amely ott NaN, akkor a rendszer adatait a mantissza kell felelnie NaN, akkor amely felmerült először. Kivételt képez ez alól, például, hozzátéve, két NaN. Ebben az esetben a mantissza találkozik egyikük, nem feltétlenül az első.
Adjunk jó példát bemutató fontos ez a különleges jelentéssel bír. Tegyük fel, hogy van egy program, hogy kiszámolja a nullák. Azt akarjuk, hogy végre úgy, hogy nem volt szükség a keresési intervallum, mint egy argumentum. Ez a végrehajtási problémát okozhat - Mi van, ha a program megpróbálja értékének kiszámításához túlmutat a definíciója a függvény? Különösen a program megpróbálja a négyzetgyök -4. Ha egy program hibaüzenetet, és megállítsa a munka lenne haszontalan számunkra. NaN megléte lehetőséget ad számunkra, hogy vissza eredményeként figyelembe a négyzetgyök és folytatja a munkát.
végtelenség
Infinity létezik kezelni az ilyen helyzeteket, mint a túlfolyó és nullával osztás. A túlfolyó, visszatérhet a maximális ábrázolható lebegőpontos szám. Ez a megoldás azonban nem mindig indokolt. Sokkal jövedelmezőbb tudni, hogy túlcsordult, és a megfelelő intézkedések megtételére, kapott eredményeként. Van egy pozitív és negatív végtelen. Kézhezvételét követően van mód annak megállapítására, hogy miért jelentkezett a hiba -, mert a túlfolyó vagy azért, mert a nullával osztani. Ez az információ rendelkezésre áll a zászló állapotban.
Számtani segítségével tiszta intuitív: elosztjuk a végső értéke az eredmény nulla; amikor hozzáadásával vagy kivonásával a végső értéke az eredmény az lesz, vagy volt.
Adunk egy kis példa egy végtelen számtani.
Tegyük fel, hogy dolgozunk a funkció
Ez a felvétel funkció nem túl jó. Amikor sqrt \ beta ^ / 2> „/> sqrt \ beta ^ / 2>” /> túlcsordulás, és az eredmény 0. Ez helytelen a nevezőben a kapott eredmény legyen a sorrendben. Átírni más formában.
Ez a képlet nem lesz olyan hamar okozhat túlcsordulás. A származás akkor is megteszi a helyes értéket, mivel „/> lesz kerek nulla.
Ez a példa azt mutatja, a fő előnye, hogy segítségével egy végtelen számtani: a használata gyakran megkerüli ellenőrzése számos szélsőséges esetekben.
Zero egy jel
Zero felel meg a nulla mantissza és exponens -1 „/>. Értékétől függően a jel bit lehet. Lássuk be ezek speciális beviteli értékeket.
Kezdeni, hogy egy érdekes megfigyelés: az IEEE szabvány határozza meg, hogy. Ez úgy történik, hogy amikor a feltételes állítások az űrlap nem merül fel bizonytalanság. De ez nem jelenti azt, hogy a szabvány nem tesz különbséget a két érték között. Ha megszorozzuk számok nullákkal jeleit vagy elosztjuk nullák jelek a jelek száma alapján határozzák meg a szokásos aritmetikai jel. Például, és.
Tegyük fel, hogy a föld nem lenne jel. Ezt követően, ha lenne a bizonytalanság az érték kiszámítására vonatkozó kifejezés. A bizonytalanság abban a tényben rejlik, hogy „/> és” /> egyenlő lenne 0. Ugyanakkor hozott logikailag helyes értéket. Más szóval,
Mivel fennáll a végtelen jelei az egyetlen megoldás a probléma az, hogy adja meg a nullák jeleivel.
Nézzük egy másik példát.
Tekintsük a funkciót. Tegyük fel, hogy - igen kis negatív számot. Ha le van kerekítve nulla, akkor az eredmény az lenne, hogy, persze, rossz. Az IEEE szabvány nem merül fel ilyen probléma. Ebben az esetben, lekerekített és visszaadja az értéket NaN.
szabványosított szám
Az utolsó speciális IEEE szabvány érték denormalizált számokat.
Vegyünk egy példát. Legyen u = -98 „/> A számok és - .. lebegőpontos számok, amelyek eltérnek a legkisebb ábrázolható szám több mint 10-szer Ezek a számok egy érdekes eleme a különbség nulla, bár nem egyenlő ez .. mert a legömbölyített nulla. szeretnénk ismerős számunkra a személyazonosság
mindig teljesül. E nélkül a személyazonosító elég nehéz olyan programokat írni működnek tört számok. Kellett lennie a program kódot tartalmaz egy az ellenőrzések számát és feltételes utasítások.
Megadása nem normalizált számok megoldja a problémát.
A lényeg az, hogy amikor az exponens egyenlő „/> mantissza kell normalizálni. Ezért, amikor, és = -98” /> nem a minimális ábrázolható számát. is érvényes lebegőpontos szám.
Hozzáférés a méret a különböző fordítóprogramok
A mappában tartalmazza a telepítési könyvtár van egy szabványos VC Heather „float.h”, amely leírja az alapvető paramétereket a formátumok úszó, dupla és hosszú dupla. Van is egy fejléc „limits.h” ismertet, mely számos funkciót dolgozni speciális értékeket.
Borland C fordító (3.1)
Ugyanebben include könyvtárat Heather „float.h”
GCC fordító (3.4)
A telepítési könyvtár (usr / lib / gcc /.) Mindent, pontosan ugyanazt tartalmazza egy mappát Heather. Ez „float.h” fájlt.