Momentálne ste offline a čaká sa, kým sa znova pripojíte na internet

(Kompletný) Tutorial pochopiť IEEE pohyblivej rádovej čiarky chyby

DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.

Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:42980
Upozornenie na neaktuálny obsah článku databázy KB
Tento článok obsahuje informácie o produktoch, pre ktoré spoločnosť Microsoft už neposkytuje technickú podporu. Z tohto dôvodu je tento článok publikovaný ako nezmenený a už nebude aktualizovaný.
SUHRN
S pohyblivou rádovou čiarkou matematika je komplexná Téma, ktoré plete mnohéobvodov. Nižšie výučba by sa vám rozpoznať programovaniesituácie, keď sú pravdepodobne vyskytnú pohyblivej rádovej čiarky chyby a akoim vyhnúť. To by tiež malo umožniť rozpoznáte prípadov, ktoré súspôsobené inherentné matematiku pohyblivej rádovej čiarky obmedzenia ako protiklad kskutočné kompilátor chýb.
DALSIE INFORMACIE

Desatinné a dvojkovej číselnej sústave

Normálně, sme počítať veci v základom 10. Základňa je úplnesvojvoľné. Jediným dôvodom je, že ľudia tradične používajú base10 je, že majú 10 prstami, ktoré urobili šikovné počítanienástroje.

Číslo 532.25 v desiatkovom formáte (základ 10) znamená nasledovné:
   (5 * 10^2) + (3 * 10^1) + (2 * 10^0) + (2 * 10^-1) + (5 * 10^-2)       500    +     30     +      2     +     2/10    +    5/100   _________   =  532.25				

V do dvojkovej sústavy (base 2), každý stĺpec predstavuje výkonom2 namiesto 10. Napríklad číslo 101.01 znamenápo:
   (1 * 2^2) + (0 * 2^1) + (1 * 2^0) + (0 * 2^-1) + (1 * 2^-2)       4     +      0    +     1     +      0     +    1/4   _________   =  5.25  Decimal				

Ako celé čísla sú zastúpené v ks

Pretože nie je frakčnou časť na integer, jeho strojzastupovanie je oveľa jednoduchšie, ako je to s pohyblivou rádovou čiarkou hodnôt. Normálne,celé čísla na osobné počítače (PC) sú 2 bajty (16 bitov) dlho snajvýznamnejší bit uvedením znamienko. Long Integer sú 4 bajty.Kladné hodnoty sú priamočiare binárne čísla. Napríklad:
    1 Decimal = 1 Binary    2 Decimal = 10 Binary   22 Decimal = 10110 Binary, etc.				

Avšak, záporné celé čísla sú reprezentované pomocou týchto dvoch komplementschéma. Získať týchto dvoch komplement zastúpenie pre negatívnečísla, prijať binárne zastúpenie pre číslo absolútnej hodnotea potom flip všetky bity a pridajte 1. Napríklad:
   4 Decimal = 0000 0000 0000 0100               1111 1111 1111 1011     Flip the Bits   -4        = 1111 1111 1111 1100     Add 1				

Všimnite si, že -1 desatinné = 1111 1111 1111 1111 v binárny, čo vysvetľujePrečo Basic zaobchádza s -1 ako logickú hodnotu true (všetky bity = 1). To jedôsledkom nemajú samostatné subjekty logickú a logicképorovnania. Často v Basic, je výhodné použiť fragment kódunižšie keď váš program tvorby veľa logických porovnaní. Totovýznamne napomáha čitateľnosť.
   CONST TRUE = -1   CONST FALSE = NOT TRUE				

Všimnite si, pridaním ľubovoľnú kombináciu dva roky komplement čísiel spolupomocou bežných binárne aritmetický vyrába správny výsledok.

S pohyblivou rádovou čiarkou komplikácií

Každý desiatkové celé číslo môžete presne reprezentované binárne celé číslo;Avšak, to nie je pravda pre frakčnou čísla. V skutočnosti každýčíslo, ktoré je iracionálne v základnej 10 bude aj iracionálne v ktoromkoľveksystém so základňou menší ako 10.

Pre binárny, najmä, len frakčnou čísla, ktoré môžu byťkde q je celočíselnú mocninu 2, môžu byť zastúpené vo forme p/q,vyjadrené presne, s konečný počet bitov.

Nemôže byť dokonca spoločné desatinné zlomky, napríklad desatinné 0,0001zastúpené presne v binary. (0,0001 je zlomok opakujúce sa binárnes obdobím 104 bitov!)

To vysvetľuje, prečo jednoduchý príklad, ako sú nasledovné
   SUM = 0   FOR I% = 1 TO 10000      SUM = SUM + 0.0001   NEXT I%   PRINT SUM                   ' Theoretically = 1.0.				

bude tlačiť 1.000054 ako výstup. Malá chyba v zastupujúcich 0,0001v binary propaguje súčtu.

Z rovnakého dôvodu, ste vždy mali veľmi opatrní pri prijímaníporovnania v reálnych čísel. Nasledujúci príklad ilustrujespoločné programovanie chyba:
   item1# = 69.82#   item2# = 69.20# + 0.62#   IF item1# = item2# then print "Equality!"				

To nie je možné VYTLAČIŤ "Rovnosť!" pretože 69.82 nemôže byť zastúpenépresne v binárny, ktorý spôsobuje hodnota, ktorá vyplýva zPriradenie MIERNE odlišný (binárne) ako hodnota, ktorá jegenerované z výrazu. V praxi by mali vždy kódtakéto porovnanie tak, aby umožňovalo určitá tolerancia. PrePríklad:
   IF (item1# < 69.83#) AND (item1# > 69.81#) then print "Equal"				

Bude tlačiť "Rovnajú".

IEEE formát čísla

QuickBasic pre MS-DOS, verzia 3.0 bol dodaný s MBF(Microsoft binárny plávajúce bod) verzia a IEEE (Institute ofElectrical and Electronics Engineers) verzia pre stroje smatematický koprocesor. QuickBasic pre MS-DOS, verzie 4.0 a novšejpoužívať len IEEE. Microsoft zvolili štandard IEEE zastupovaťs pohyblivou rádovou čiarkou hodnôt v aktuálnych verziách základného na nasledujúcetri základné dôvody:
  1. Umožniť Basic používať matematické koprocesory Intel, ktoré používajú IEEE formát. Intel 80 x 87 série koprocesory nemôže pracovať s Microsoft binárny formát čísla.
  2. Aby interlanguage volania medzi Basic, C, Pascal, Fortran, HASKELL, a MASM oveľa jednoduchšie. V opačnom prípade by museli konverzie rutiny použiť môžete odoslať číselné hodnoty z jedného jazyka do druhého.
  3. Na dosiahnutie konzistentnosti. IEEE je uznávaný priemyselný štandard pre C a FORTRAN kompilátory.
Nasledujúce je rýchle porovnanie IEEE a MBF zastúpenia-dvojitej presnosti čísle:
               Sign Bits   Exponent Bits   Mantissa Bits               ---------   -------------   -------------   IEEE        1           11              52 + 1 (Implied)    MBF        1            8              56				

Ďalšie informácie o rozdieloch medzi IEEE a MBFs pohyblivou rádovou čiarkou zastúpenie, dotaz v databáze Microsoft Knowledge Base nanasledujúce slová:
   IEEE and floating and point and appnote				

Všimnite si, že IEEE má viac bitov venovaný exponent, ktorý umožňujeho zastupovať širší rozsah hodnôt. MBF má viac mantisy bitov,ktoré umožňuje, aby sa presnejšie rozsahu jeho užší.

General Concepts s pohyblivou rádovou čiarkou

Je veľmi dôležité si uvedomiť, že akýkoľvek binárne pohyblivej rádovej čiarky systémmôže predstavovať len konečný počet pohyblivej rádovej čiarky hodnoty v presnýformulár. Všetky ostatné hodnoty musí aproximovať najbližšierepresentable hodnota. Štandard IEEE určuje metódu prezaokrúhľovanie hodnoty "najbližšie" representable hodnotu. QuickBasicpre systém MS-DOS podporuje štandard a zaokrúhli podľa IEEEpravidlá.

Tiež, majte na pamäti, že čísla, ktoré môžu byť zastúpené vo IEEEsú rozložené počas veľmi široký. Môžete si ich predstaviť načíslo riadku. Existuje vysokou hustotou representable čísla blízkosti 1.0a-1.0, ale stále menej a menej, ako idete smerom k 0 alebo nekonečno.

Cieľ IEEE štandardom, ktorý je navrhnutý pre inžinierstvovýpočty, je maximalizovať presnosť (dostať čo najbližšie kskutočný počet). Presnosť sa vzťahuje na počet číslic, ktoré stemôže predstavovať. Štandard IEEE pokúša rovnováhu medzi počtombity venovaný exponent s počet bitov používaných prefrakčnou časť čísla udržať správnosť a presnosťv rámci prijateľných limitov.

IEEE podrobnosti

S pohyblivou rádovou čiarkou čísla sú zastúpené v nasledujúcej forme, kde[exponent] je exponent, na binárne:
   X =  Fraction * 2^(exponent - bias)				

[Zlomok] je normalizovanom frakčnou časť čísla, normalizovanápretože exponent sa upraví tak, aby vedúci bit je vždy1. Týmto spôsobom, nesmie sa skladovať, a dostanete jeden viac bitpresnosti. To je dôvod, prečo tam je implicitné bit. Môžete myslieťto rád exponenciálnom, kde môžete manipulovať exponent namajú jedna číslica naľavo od desatinnej čiarky, s výnimkou binárny, môžetevždy môžete manipulovať exponent tak, aby prvý bit 1, pretožeexistuje iba 1s a 0s.

[zaujatosti] je bias hodnotu použitú sa predišlo potrebe uložiť negatívneexponentoch.

Systematickej jedinej-presné čísla je 127 a 1023 (desiatkovo) pre-dvojitej presnosti čísla.

Hodnoty rovné všetky 0 a všetky 1 (binárne) sú vyhradené prepredstavujúce osobitné prípady. Existujú aj iné špeciálne prípadyktoré označujú rôzne chyby podmienky.

Jedinej-presnosťou príklady

2 = 1 * 2 ^ 1 = 0100 0000 0000 0000... 0000 0000 = 4000 0000 hex
Poznámka bit znamienka je nula a uložené exponent je 128, alebo 100 0000 0 v binárnych, ktoré je 127 plus 1. Uložené mantisy je (.) 1000 0000... 0000 0000, ktorý má implikovaných popredných 1 a binárny bodu, tak skutočné mantisy je 1.

-2 = -1 * 2 ^ 1 = 1100 0000 0000 0000... 0000 0000 = C000 0000 hex
Rovnaké ako + 2 okrem toho, že je nastavený bit znamienka. To platí pre všetky IEEE formát s pohyblivou rádovou čiarkou čísla.

4 = 1 * 2 ^ 2 = 0100 0000 1000 0000... 0000 0000 = 4080 0000 hex
Rovnaké mantisy exponent zvyšuje jedným (neobjektívne hodnota je 129, alebo 100 0000 1 v binary.

6 = 1.5 * 2 ^ 2 = 0100 0000 1100 0000... 0000 0000 = 40 C 0 0000 hex
Rovnaké exponent mantisy je väčšia o polovicu--je (1.) 100 0000... 0000 0000, ktoré, pretože je to binárnu zlomok, je 1-1/2 (frakčnou číslice sú hodnoty 1/2, 1/4, 1/8, atď.).

1 = 1 * 2 ^ 0 = 0011 1111 1000 0000... 0000 0000 = 3F80 0000 hex
Rovnaké exponenta ako iné právomoci 2, mantisy je jeden menej ako 2 na 127 alebo 011 1111 1 v binary.

.75 = 1.5 * 2 ^ -1 = 0011 1111 0100 0000... 0000 0000 = 3F40 0000 hex
Neobjektivní exponent je 126, 011 1111 0 v binárnych a mantisy je (1.) 100 0000... 0000 0000, ktorá je 1-1/2.

2.5 = 1,25 * 2 ^ 1 = 0100 0000 0010 0000... 0000 0000 = 4020 0000 hex
Presne rovnaký ako 2 okrem toho, že je bit, ktorý predstavuje 1/4 nastaviť v mantisy.

0,1 = 1,6 * 2 ^ -4 = 0011 1101 1100 1100... 1100 1101 = 3DCC CCCD hex
1/10 je zlomok opakujúcej sa v binary. Mantisy je len nesmelý na 1.6, a skreslené exponent hovorí, že 1.6 sa vydelí 16 (je to 011 1101 1 v binárny, ktorá je 123 v desiatkovom formáte). Pravda exponent je 123-127 = - 4, čo znamená, že faktor, ktorým na násobenie je 2 ** -4 = 1/16. Všimnite si, že je uložené mantisy zaokrúhlené nahor v posledný bit. Jedná sa o pokus zastupovať unrepresentable číslo čo najpresnejšie. (Z dôvodu že 1/10 a 1/100 sú presne representable v binary je podobný na ceste, že 1/3 je presne representable v desiatkovom formáte.)

0 = 1,0 * 2 ^-128 = núl--špeciálny prípad.

Iné spoločné operácie v pohyblivej rádovej chyby

Nasledujú bežné pohyblivej rádovej čiarky chyby:
  1. Zaokrúhliť chyba

    Táto chyba vzniká vtedy, keď všetky bity v binárne číslo nemožno použiť vo výpočte.

    Príklad: Pridanie 0,0001 na 0.9900 (jediný presnosť)

    Desatinné 0,0001 zastúpené ako:
    (1.) 10100011011011100010111 * 2^(-14+Bias) (13 vedie 0s v Binárne!)
    0.9900 budú zastúpené ako:
    (1.) 11111010111000010100011 * 2^(-1+Bias)
    Teraz sa vlastne pridať tieto čísla, desatinné (binárne) body musia byť zarovnané. To musí byť Unnormalized. Tu je výsledné pridanie:
           .000000000000011010001101 * 2^0  <- Only 11 of 23 Bits retained      +.111111010111000010100011 * 2^0      ________________________________       .111111010111011100110000 * 2^0						
    Toto sa nazýva zaokrúhliť chyba, pretože niektoré počítače kolo, keď presúva na doplnenie. Ostatné jednoducho skrátiť. Zaokrúhliť chyby sú dôležité zvážiť vždy, keď pridávate alebo súčin dvoch veľmi odlišné hodnoty.
  2. Odčítanie hodnoty dvoch takmer rovnaké hodnoty
           .1235      -.1234       _____       .0001						
    To bude štandardizovať. Všimnite si, že hoci pôvodné čísla Každý mal štyri významné číslice, výsledok má len jeden významných číslic.
  3. Pretečenie a podtečenie

    To sa vyskytuje, keď výsledok je príliš veľký alebo príliš malý na zastúpení typ údajov.
  4. Quantizing chyba

    S tými číslami, ktoré nemôžu byť zastúpené vo presné v takom formulár s pohyblivou rádovou čiarkou štandardom.
  5. Rozdelenie veľmi malé množstvo

    To môže vyvolať "delenie nulou" chyba alebo môžu produkovať zlé výsledky, ako v nasledujúcom príklade:
          A = 112000000      B = 100000      C = 0.0009      X = A - B / C						
    V QuickBasic pre MS-DOS, X teraz má hodnotu 888887, namiesto správnu odpoveď, 900000.
  6. Výstup chyba

    Tento typ chyby sa vyskytuje, keď zmeniť výstupné funkcie hodnoty pracujú s.
1,00 2,00 3,00 4,00 4.00b 4.50 6.00 6.00b 7.00 7.10 IEEETUTR

Upozornenie: Tento článok bol preložený automaticky.

Vlastnosti

ID článku: 42980 – Posledná kontrola: 10/10/2011 12:39:00 – Revízia: 2.0

Microsoft Visual Basic 2.0 Standard Edition, Microsoft Visual Basic 3.0 Professional Edition, Microsoft Visual Basic 1.0 Standard Edition, Microsoft Visual Basic 2.0 Professional Edition, Microsoft BASIC Professional Development System 7.0

  • kbmt KB42980 KbMtsk
Pripomienky