"
Ez a mûvelet központi jelentőségû az egész numerikus matematikában. Nagy egyenletrendszerek megoldása végül is gyakorlatilag mindig a skalárszorzat többféle alkalmazására vezethető vissza. A mûvelet sok (1000 darab nem ritka) szorzat összeadásából áll, amelyek egyenként kétkét lebegőpontos szám összeszorzásából adódnak. Ezen szorzatok nagyságrendje általában alig becsülhető. Emiatt sokat segít, hogy a hosszú regiszterben ezek összeadása (az ún. akkumulálás) mindenféle kerekítés nélkül történik. Csak a teljes összeget kerekítjük, hogy a további számítás lebegőpontos formátumban történhessen.
Elméletileg a hosszú fixpontos regiszter a szokásos hardverrel realizálható. A 600 számjegyet, amiből egy hosszú fixpontos szám áll, osszuk szét megfelelő hosszúságú részsorozatokra, és ezek mindegyikét tároljuk egy hagyományos fixpontos számban. Minden ilyen tárolóegység helye a hosszú számon belül rögzített; csak arról kell gondoskodni alkalmas programozással, hogy a lebegőpontos számot ennek a hosszú számnak a megfelelő pozíciójához adjuk.
Bár egy így összerakott (emulált) hosszú regiszter olyan hibamentesen mûködik, ahogy azt az elmélet állítja, mégis a gyakorlat számára nem alkalmas. A számítási munka a különben szükséges idő többszörösét igényli úgy, hogy egy felhasználó inkább a hagyományos, de sokkal gyorsabban megkapható eredményre szavazna.
Egy modern processzorban a lebegőpontos összeadás annyira optimalizált, hogy sokkal gyorsabban lehet végrehajtani, mint bármely logikailag ekvivalens, de explicit programozással kapott (azaz több egyedi utasításból összetett) alternatíváját. Emiatt kerül a már szoftverben megvalósított négyszeres pontosságú aritmetika közel négyszer annyi időbe, mint a konvencionális. Ha azonban az akkumulációt a hosszú fixpontos regiszterbe „bedrótozzuk", a lapkába beépítjük, akkor a növelt pontosságot időveszteség nélkül kaphatjuk meg.
A Karlsruhei Egyetemen Kulisch professzor intézetének egy munkacsoportja, a Hamburg-Harbuurgi Mûszaki Egyetem Informatikai Intézete és a Stuttgarti Egyetem Mikroelektronikai Intézete 1995-ben egy ilyen mikrocsipet fejlesztett ki: az XPA3233 vektoraritmetika-processzort. Ezzel egy időben a szokásos programozási nyelveket is átírták, amikkel aztán a processzor új tulajdonságai kihasználhatók: ilyenek a PASCAL-XSC, C-XSC és Fortran-XSC. A fent említett szoftverimplementációval szemben a lapka százszoros számítási sebességet ért el, és ezzel megelőzte a négyszeres pontosságú aritmetikát mind minőségben, mind gyorsaságban.
|
Intervallum-aritmetika
Az is lehetséges, hogy ezt az eredményt olyan szintû garanciával mondhassuk ki, mint amilyenek a matematikai bizonyítások. A modern processzorokban a négy alapmûveletet olyan alaposan implementálták, hogy a kerekítési hiba olyan kicsi, amilyen csak lehet az adott körülmények között, azaz legfeljebb egy fél helyiértéknyi az utolsó pozíción. Miután a skalárszorzás akkumulálásával egy jelentős, pontosságot rontó tényezőt hatástalanítottunk, egy régi jó elv juthat megérdemelten érvényre: az intervallumokkal való számítás.
Amikor egy hosszabb számításhoz való kiindulási értékek mért adatok, akkor ezek természetükből adódóan bizonyos pontatlansággal rendelkeznek. Például ha egy hosszúságot 1,075 ± 0,002 milliméternek mérünk, akkor szokás az 1,075 számmal tovább számolni, mintha pontos lenne, és ignorálni azt, hogy a mérési hiba a teljes számításon végigvonul. Közben, legalábbis elméletileg, egyszerû a hibát végigkövetni a teljes eljárásban: nem csak egy számmal kell számolnunk, hanem egész intervallumokkal. Egy intervallumot az alsó és felső határa definiál: a fenti példában a mérési adatnak az [1,073; 1,077] intervallum felel meg. Bár ez a megadás lazább, mint a látszólag pontosabb 1,075 érték; de így azt a bizonyosságot nyertük, hogy a mérési érték az intervallum belsejébe esik.
Ezt az elvet átvisszük a teljes számítási menetre. A továbbiakban nem egy számot adunk meg, ami remélhetőleg körülbelül egyenlő a számítás valódi eredményével, hanem egy olyan intervallumot, amelyben az eredmény bizonyosan benne van. Ha két a és b számot az [a1, a2] és a [b1, b2] intervallumokkal ábrázolunk, akkor az összeg biztosan az [a1+b1, a2+b2] intervallumban van. Itt az első összeadást lefelé, a másodikat felfelé kerekítéssel kell végrehajtani (ezeket a mûveleteket szokás külön jelekkel is kiemelni). Analóg módon definiáljuk az intervallumok kivonását, szorzását és osztását is.
Az elmélet továbbfejlesztése során aztán az intervallumok öntörvényû matematikai objektumokká válnak: az intervallumokkal való számolás matematikai törvényeit ismerjük fel, az intervallum fogalmát több dimenzióra általánosítjuk. (Egy kétdimenziós intervallum egy téglalap, egy háromdimenziós egy téglatest, megfelelő objektumok léteznek magasabb dimenziós terekben is.) Mindenekelőtt olyan programozási nyelvet írunk, amely egy intervallumot egyetlen névvel jelöl, úgy mint különben a számokat. A klasszikus programozási nyelvek, mint a Fortran, Pascal, C fent említett kibővítései rendelkeznek ezzel a lehetőséggel. A programozó tehát ugyanolyan formula jellegû utasításokat adhat intervallumokkal való számolásra, mint különben a számokkal.
Az intervallumokkal való számolás koncepciója tehát kézzelfogható előnyöket kínál, és ennek alapjai évtizedek óta ismertek. Az ötletet először Teruo Sunaga japán matematikus publikálta 1958-ban; 1967- ben már futott egy megfelelően kibővített Algol-60 programozási nyelv Zuse Z23-as számítógépén Karlsruhéban. Mégis az intervallum- aritmetika eddig nem terjedt el általánosan.
Túlságosan lassú, vetik ellen a kritikusok, és gyakran túl pesszimista abban az értelemben, hogy túl nagy intervallumokat ad meg, és így az eredményeknek sokkal nagyobb bizonytalanságot tulajdonít, mint ami a valóságnak megfelel. Sokszor az a hosszú és fáradságos számítás eredménye, hogy a megoldás -Ą és +Ą között van, amit amúgy is tudtunk.
Az első érv találó - legalábbis a jelen helyzetre, de nem az elvre. Az intervallumos számolás lassú, mert eddig, kényszerhelyzetben olyan gépeken hajtjuk végre, amelyeket nem kifejezetten erre terveztek. Így már csak a kerekítési módok beállítása is sok időt visz el, mert ez a ma csaknem kizárólagosan követett IEEEstandardban a tényleges mûvelettől el van választva; persze a szokásos aritmetikában alig használják. Egy megfelelően megtervezett processzor, amely még a két végpontot is párhuzamosan számítja, ugyanolyan gyors intervallumokon, mint szokásos számokkal.
A második érv az intervallum-aritmetika naiv alkalmazásaira érvényes. Ha egy f függvényt az X = [a, b] intervallumra értékelünk ki, szintén egy intervallumot kapunk, amit aztán f(X)-szel jelölünk, és ami minden a és b közötti x-re f(x)-et tartalmazza - de lehetőség szerint mást nem. Amikor az intervallum nagy, és az f függvényt ügyetlenül értékeljük ki, akkor valóban tekintélyesen túlbecsült intervallumot kaphatunk. Két számítási eljárás, amelyek számokra egyenértékûek, intervallumokra alkalmazva ugyanis teljesen más eredményeket adhatnak. De az elmélet megad egy olyan eljárást (az ún. középponti alakot), amely a túlbecslést minimálissá teszi.
Ezen túl mindig megvan a lehetőség egy intervallum részintervallumokra bontására, ez a numerikus matematikában gyakori megoldás. Az említett optimális számítási móddal a túlbecslés még gyorsabban csökken, mint a részintervallumok mérete.
Általában arról van szó, hogy egy feladat több megoldása közül olyat találjunk, amely esetén az intervallumos számítás az erejét meg tudja mutatni. Ez a megoldási mód gyakran nem a különben is szokásos. Így egyes egyenletrendszerekre vannak explicit megoldó algoritmusok: olyan számítási lépéssor, amely egy előre adott véges számú lépés után a pontos megoldást szolgáltatja - ha tudnánk pontosan számolni. Ritkán fordul elő, hogy ilyen algoritmus rendelkezésre áll; többnyire csak iteratív eljárások vannak (lásd a keretes írást). Tehát olyanok, amelyek egy közelítő megoldásból remélhetően jobbat tudnak adni.
|
Sajnos az iterációs eljárások nem mindig csökkentik az intervallumokat (nem kontrahálók). Inkább az fordul elő, hogy egy iterációs lépés nem csak átmenetileg téves irányba halad, hanem egy intervallumot is lényegesen megnagyobbít. A hagyományos aritmetika ekkor veszít a pontosságból, anélkül, hogy észrevennénk; az intervallum-aritmetika ezzel szemben az eddig elértet nem kell, hogy feladja. Az eddigi intervallum bizonyossággal tartalmazza a megoldást, az újonnan számított, nagyobb szintén: tehát átlagos esetben a megoldás a két intervallum metszetében van. Így az intervallumos módszer még információt is nyer ebből a helyzetből, amely különben az eljárás kudarcát jelenthetné (keretes szöveg). Az intervallum-aritmetika nyilvánvalóan jobban alkalmas akkor, ha valójában nem számot, hanem intervallumot keresünk. Például amikor van egy f(x) függvényünk, amely túl bonyolult ahhoz, hogy elméleti eszközökkel kezeljük, és azt szeretnénk tudni, hogy egy tartomány minden x értékére nagyobb-e, mint nulla. (Például f(x) = 0 egy veszélyes helyzetnek felel meg, vagy a rendszer összeomlását jelenti.)
|
A klasszikus analízis egy központi eljárása közelebbről megvizsgálva úgy mûködik, mintha az intervallum-aritmetika számára találták volna ki: a függvényeknek a Taylor-polinomokkal való közelítése. Szinte minden jelentősebb függvény értékeit nagy pontossággal lehet közelítőleg meghatározni, éspedig olyan módon, amely csak összeadásokat és szorzásokat igényel. Mindenekelőtt azonban az approximációs hiba, tehát a valódi és a közelítő érték különbsége, megadható. Ez egy kis szám megszorozva egy bizonyos derivált-értékkel egy olyan helyen, ami szintén megadható intervallumban van.
Az elmélet tehát megad egy intervallumot a hibára, az intervallum-aritmetikának csak ki kell ezt számítania. Ugyanakkor ehhez egy magasrendû deriváltat kell kiértékelni. Ezt nehéz kézzel implementálni; de van már olyan módszer, az „automatikus differenciálás", amellyel a programozó ezt a munkát a számítógépre bízhatja.
Ezzel az intervallum-aritmetikára hasonló kép alakul ki, mint a nagy pontosságú számításra: egyik sem tud egyedül fejlődni egy olyan világban, amelyben minden másféle számítási módra van beállítva. Bár kölcsönösen támogatják egymást, de teljes kibontakozásukhoz mind illeszkedő hardverre, mind megfelelő elméletre és arra támaszkodó szoftverre is szükség van.
Az XPA 3233 lapka mégis jó példa ezen koncepciók mõködőképességére. Mint a gyakorlati alkalmazások számítási eszközét már meghaladta a gyorsan fejlődő technológia. A piacképességig való továbbfejlesztéséhez hiányzott annak idején az anyagi támogatás.
Mégis, John Gustafson, jelentős amerikai számítógépes szakember nemrég felhívást tett közzé, ráirányítva a figyelmet a garantált számítási eredményekre, és az intervallum- aritmetikára. Mindkét koncepció jövőjét illetően óvatos optimizmusra van okunk.
|
|