Cikk azonosítója: 78113 - Utolsó ellenőrzés: 2010. május 13. - Verziószám: 7.0 Előfordulhat, hogy a lebegőpontos aritmetika pontatlan eredményeket ad az Excel alkalmazásban
A lap tartalmaÖsszefoglaló A cikkből megtudhatja, hogy a Microsoft Excel miként tárolja és számítja ki a lebegőpontos számokat. Ez a kerekítésnek, illetve az adatcsonkításnak köszönhetően érintheti néhány számítás vagy képlet eredményét. ÁttekintésA Microsoft Excel alkalmazást az IEEE 754-es specifikációnak megfelelően, a lebegőpontos számok tárolásának és kiszámításának figyelembevételével tervezték. A nemzetközi testületként működő IEEE (Institute of Electrical and Electronics Engineers) többek között számítógépszoftverek és -hardverek szabványainak kidolgozásával foglalkozik. A széles körben elterjedt 754-es specifikáció a lebegőpontos számok bináris számítógépen történő tárolását írja le. Népszerűségét annak köszönheti, hogy a lebegőpontos számok helytakarékosságot és viszonylag gyors számítást tesznek lehetővé. A 754-es szabványt a legtöbb mai lebegőpontos számításra képes mikroprocesszor használja, így az Intel, a Motorola, a Sun és a MIPS lebegőpontos egységei és matematikai processzorai is.A számok tárolásakor minden szám vagy törtszám kifejezhető egy megfelelő bináris számmal. Az 1/10 tört például decimális számrendszerben a következőképpen ábrázolható: 0,1. Ugyanez a szám azonban bináris formátumban a 0001100110011100110011 (stb.) végtelen szakaszos bináris törtszámmal fejezhető ki. Ez a szám nem ábrázolható véges (behatárolt) térben, ezért tároláskor -2,8E-17-tel lefelé kerekítődik.Az IEEE 754-es specifikációnak azonban korlátai is vannak, amelyek három általános kategóriába sorolhatók:
További információMaximális/minimális korlátokMinden számítógép esetében van egy kezelhető maximális és minimális szám. Mivel a szám tárolásához szükséges memóriabitek száma véges, a tárolható maximális vagy minimális szám szintén véges. Az Excel esetében a tárolható maximális szám az 1,79769313486232E+308, a tárolható minimális szám pedig a 2,2250738585072E-308.Azok az esetek, amikor mérvadónak tekintjük az IEEE 754-es szabványt
Azok az esetek, amikor nem tekintjük mérvadónak az IEEE 754-es szabványt
PontosságA lebegőpontos számok a bináris számrendszerben történő tároláskor három részből tevődnek össze egy 65 bites tartományon belül: az előjelből, az exponensből és a mantisszából.A táblázat összecsukása
Mind a mantissza, mind az exponens külön tárolt összetevő. Ennek eredményeként a lehetséges pontosság mennyisége a módosított szám (a mantissza) méretétől függően változhat. Az Excel az 1,79769313486232E308 és 2,2250738585072E-308 közötti számokat képes tárolni, de csak 15 számjegy pontosságon belül. Ez nem az Excel korlátja, hanem az IEEE 754-es szabványhoz való szigorú ragaszkodás közvetlen eredménye. Ez a pontossági szint más táblázatkezelő alkalmazásokban is megtalálható. A lebegőpontos számokat a következő alakban ábrázolják, ahol az exponens a bináris exponens: X = Törtrész * 2^(exponens - eltolás) A Törtrész a szám normalizált törtrésze, és azért normalizált, mert az exponens úgy van beállítva, hogy a vezető bit mindig 1. Ily módon a vezető bitet nem kell tárolni, ami egy bittel nagyobb pontosságot tesz lehetővé. Ez az oka az implicit bit használatának. Mindez hasonlít a tudományos jelöléshez, ahol úgy módosítják az exponenst, hogy a tizedes ponttól balra egy számjegyet tartalmazzon. A bináris formátumot kivéve az exponens mindig módosítható annak érdekében, hogy a vezető bit 1 legyen, mivel nincs más szám, mint 1 és 0.Az eltolás a negatív exponensek tárolásának elkerülésére használt eltolási érték. Az eltolás egyszeres pontosságú számok esetén 127, dupla pontosságú számok esetén pedig 1,023 (tizedes tört). Az Excel dupla pontosságot használ a számok tárolásakor. Példa nagyon nagy számok használatávalÍrja be a következőt egy új munkafüzetbe:A1: 1,2E+200 B1: 1E+100 C1: =A1+B1 Példa nagyon kis számok használatávalÍrja be a következőt egy új munkafüzetbe:A1: 0,000123456789012345 B1: 1 C1: =A1+B1 A pontossági hibák kijavításaAz Excel két alapvető módszert kínál a kerekítési hibák kiküszöbölésére: a KEREKÍTÉS függvényt és A mutatott pontosság szerint vagy a Megjelenés szerinti pontosság beállítása munkafüzet-beállítást.1. módszer: A KEREKÍTÉS függvényA fenti adatokat használó következő példa egy szám öt számjegyre történő kerekítésének kényszerítését szemlélteti. Ez lehetővé teszi az eredmény sikeres összehasonlítását egy másik értékkel.A1: 1,2E+200 B1: 1E+100 C1: =KEREKÍTÉS(A1+B1,5) Eredmény: 1,2E+200. D1: =HA(C1=1,2E+200, IGAZ, HAMIS) Eredmény: IGAZ érték. 2. módszer: A mutatott pontosság szerintEgyes esetekben A mutatott pontosság szerint beállítás használatával kiküszöbölhetők a kerekítési hibák a számításokból. Ezzel a beállítással kikényszeríthető, hogy a munkafüzetben szereplő számok értéke a megjelenített érték legyen. A beállítás bekapcsolása:
Szakaszos bináris számok és nullához közeli eredményt adó számításokA lebegőpontos számok bináris formátumban történő tárolásakor zavaró problémát jelent az is, hogy bizonyos számok, amelyek a 10-es alapú decimális számrendszerben véges, nem szakaszos számok, bináris formátumban végtelen, szakaszos számokként tárolhatók. A leggyakoribb példa erre a 0,1 érték és annak variánsai. Bár e számok tökéletesen ábrázolhatók a 10-es alapú számrendszerben, a fenti számból bináris formátumban a következő szakaszos szám lesz a mantisszában tárolva:000110011001100110011 (stb.) Az IEEE 754-es specifikáció semmilyen számmal kapcsolatban nem tartalmaz külön kitételt; amit tud, azt tárol a mantisszában, a többit pedig csonkolja. Ez megközelítőleg -2,8E-17, vagy tároláskor 0,000000000000000028 értékű hibát eredményez.Még a közönséges tizedes törtek (például a 0,0001) sem ábrázolható pontosan bináris formátumban. (a 0,0001 104 bites szakaszokat tartalmazó bináris törtszám). Ennek oka nagyjából ugyanaz, mint amiért az 1/3 tört nem fejezhető ki pontosan a decimális számrendszerben (csak a 0,33333333333333333333 szakaszos törttel). Mindez arra is magyarázatot ad, hogy a Microsoft Visual Basic for Applications alkalmazásban az alábbi egyszerű példának Példa negatív szám hozzáadására
Példa nullát elérő értékre
Egy Excel 97 alkalmazásban bevezetett optimalizálás azonban már megkísérli kiküszöbölni ezt a problémát. Ha egy hozzáadási vagy kivonási művelet eredménye nulla vagy ahhoz közeli érték, az Excel 97-es vagy újabb verziója minden olyan hibát kijavít, amely az operandusok bináris formátumba, illetve formátumból történő konvertálása során keletkezett. A fenti példát az Excel 97-es vagy újabb verziójában végrehajtva a 0 vagy 0,000000000000000E+00 érték helyesen jelenik meg a tudományos jelölésben. A Microsoft Tudásbázis kapcsolódó cikkei: 172911
(http://support.microsoft.com/kb/172911/
)
A 10 nagyon magas vagy nagyon alacsony értékű hatványkitevőre emelése hibás eredményt ad (Előfordulhat, hogy a hivatkozás részben vagy teljes egészében angol nyelvű tartalomra mutat.) 214373
(http://support.microsoft.com/kb/214373/
)
XL2000: A 10 nagyon magas vagy nagyon alacsony értékű hatványkitevőre emelése hibás eredményt ad (Előfordulhat, hogy a hivatkozás részben vagy teljes egészében angol nyelvű tartalomra mutat.) A lebegőpontos számokról és az IEEE 754-es specifikációról további információt a következő webhelyeken talál: http://www.ieee.org
(http://www.ieee.org)
http://stevehollasch.com/cgindex/coding/ieeefloat.html (http://stevehollasch.com/cgindex/coding/ieeefloat.html) Hivatkozások A hibák kerülő megoldásáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat: 214118
(http://support.microsoft.com/kb/214118/
)
A lebegőpontos aritmetika kerekítési hibáinak kiküszöbölése (Előfordulhat, hogy a hivatkozás részben vagy teljes egészében angol nyelvű tartalomra mutat.) A cikkben található információ a következő(k)re vonatkozik:
A Microsoft tudásbázisban szolgáltatott információkat "az adott állapotban", bárminemű szavatosság vagy garancia nélkül biztosítjuk. A Microsoft kizár mindennemű, akár kifejezett, akár vélelmezett szavatosságot vagy garanciát, ideértve a forgalomképességre és az adott célra való alkalmasságra vonatkozó szavatosságot is. A Microsoft Corporation és annak beszállítói semmilyen körülmények között nem felelősek semminemű kárért, így a közvetlen, a közvetett, az üzleti haszon elmaradásából származó vagy speciális károkért, illetve a kár következményeként felmerülő költségek megtérítéséért, még abban az esetben sem, ha a Microsoft Corporationt vagy beszállítóit az ilyen károk bekövetkeztének lehetőségére figyelmeztették. Egyes államok joga nem teszi lehetővé bizonyos károkért a felelősség kizárását vagy korlátozását, ezért a fenti korlátozások az ön esetében esetleg nem alkalmazhatók. | Egyéb források További támogatás
KözösségAzonnali segítségA cikk fordítása
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email
A lap tetejére
