Használata matematikai koprocesszor 80x87
Használata koprocesszor jelentősen növeli a pontosságát matematikai számításokat, és felgyorsítja azok végrehajtását. Az egyetlen pont, kicsi - a rendelkezésre állás és a képesség, hogy használja azt.
Így a program képességeit használni a koprocesszor, meg kell annak elsődleges irányelv (a fordító mód gomb) $ N +:
összeállítása mód $ N + globális és nem lehet változtatni a jövőben. Létrehozásakor egységek (egység), centrikus koprocesszor, azaz segítségével a bemeneti típusok, jelezve a kulcs $ N + bennük nem szükséges. Csak az a fontos, hogy legyen a fő program, amely magában foglalja ezeket a modulokat.
Ha szükséges, kapcsolja ki a koprocesszor jeleznie kell $ N- gombot. A program leállhat összeállítani (compiler „elfelejti” típusú számokat fokozott pontossággal).
Ha a PC telepítve koprocesszor, a fordító meghatározza a kulcsszó CPU87 feltételes fordításra. Ezt fel lehet használni, hogy automatikusan kiválassza összeállítása mód:
A fenti konstrukció határozza meg a lefordított szöveg - alapján e vagy sem a koprocesszor azt.
Összeállítása után a program minden alkalommal kezdődik check társprocesszora, és meghatározza annak típusát. A vizsgálat eredményét rögzítik az előre definiált változó rendszer könyvtár - Test8087 típusa Byte (táblázat 9.8.).
Értékek Test8087 csatlakoztatva Connected 8087 2 80287 3 80387 Connected
Ha a program fordítása mód és Test8087 érték: 0, a program leáll egy üzenetet, hogy szükség van társprocesszor. Azonban van egy eszköz letiltása automatikusan ellenőrzi a koprocesszor amikor a program elindul. Szükség van olyan rendszer bevezetésére változó MS-DOS neve 87. és y értékei (IGEN - IGEN) és N (a nem - nem). Erre a legjobb megoldás az AUTOEXEC.BAT fájlt behelyezésével a vonal
Az érték a rendszer változó MS-DOS 87 egyenlő Y, megrendelések tekinthető társprocesszor csatlakoztatva, és N - rendre csatlakoztatva. Általánosságban elmondható, hogy jobb, ha nem becsapni és felszerelések programot. Fenntartásáról ezt a technikát (SET = 87) a legszélsőségesebb eset.
Turbo Pascal lehetővé teszi, hogy kövessék a koprocesszor szoftver. Ez azt jelenti, hogy lehetséges, hogy hozzon létre egy programot, amely együtt fog működni a nagy pontosságú, függetlenül a jelenléte a koprocesszor. Koprocesszor talált - nos, akkor lehet betölteni, nem koprocesszor - minden pontosságot kapunk utánzása is. Egyértelmű, hogy az utóbbi esetben nem lesz veszteség a számlákon az idő, és jelentős. Felvétele emulációs ellenőrzi a kulcs $ E. Csak akkor van értelme a gomb melletti $ N. Lehet például ezek kombinációja:
- csatlakoztassa a könyvtár versenyez a koprocesszor; ennek hiányában, a pontosság a szoftvert, amely miatt a sebességet; - A program csak akkor működik gépeken társprocesszor;
és - ko-processzor nem használják, a legfontosabb emulációs figyelmen kívül hagyja. A program csak akkor működik a szokásos pontossággal és sebességgel.
Ha a program kódot helyeznek a külső irányelvben a koprocesszor dolgozó ezt a kódot kell érkeznie használatán alapuló utasítások 80X87.
Az előnyök egy koprocesszor -, először is, a sebesség számítás, ami nőhet többször. A második előnye - növekvő pontosságú lebegőpontos. A számítás típusok bemenetet egy matematikai koprocesszor táblázatban. 9.9.
Minden ilyen típusú - ingatlan kivételével Comp, ami egy „nagyon hosszú” egész típusú (üzletek csak egész értékeket). A tartomány ilyen típusú a táblázatban megadott van kerekítve úgy, valós számok (-2 és 263-1) túl hosszú.
Rendes típusú Real (6 byte, 2.9E-39 tartományban. 1.7E + 38, 11-12 számjeggyel) együttműködik a társ-processzor, de rendkívül hatékony. Ez a formátum - egy idegen a koprocesszor, és az idő, „enni” Az átalakulás koprocesszor típus felülbírálja gyorsulás. És pontossága nem adunk hozzá. Ezért az a legjobb, hogy adja meg a típusát, mint például a Float, és megértette, mint a Real, a valós vagy tisztán koprocesszor típusú függően összeállítás módban.
d. Array [1..9] a Float;
Integral típusú Turbo Pascal munkáját a koprocesszor fenntartások nélkül.
Különösen fontos az a kérdés, hogy pontosabb számításokat. Amikor egy koprocesszor összes szabványos matematikai szereplők és nyelvi funkciók, általában visszatér értékek Real, kezdenek visszatérni típus értékeinek Extended. Ebben a tekintetben érdemes támaszkodni az ilyen típusú, mint a bázis. Mindazonáltal nagyon is lehetséges, hogy a különböző típusú változókat is részt vesznek a programban. Ezekben az esetekben a konverziós érték lesz szükség, ezért a veszteség pontossággal. Amikor értékének kiszámításánál a jobb oldalon egy feladat eredmény pontos, amely egybeesik a legpontosabb a fajta tagjai (vagy ezzel egyenértékű a legnagyobb horderejű típus). Ez azt jelenti, hogy a hozzárendelés
A kifejezés a jobb kiszámítása a típus Extended. De ha rendelni egy változó eredmény «kis» egységes csonkolás végeznek, és jelentősen csökkentette a számjegyek száma a tizedespont után. Az ilyen helyzetek kell előre, és próbálja elkerülni őket. Különösen zavaró vannak az összegzése ciklusok:
i: = 32.767-65.535 do Sum: = Sum + i / e;
Amennyiben az ilyen veszteségeket meg kell ismételni ezerszer, és a felhalmozott hiba lehet arányos összegét. Korrigálja a helyzet egyszerű: meg kell, hogy egy további változó eSum pontos típusa kiterjesztette az összeadó, és átírni ciklus:
i: = 32.767-65.535 do eSum: = eSum + i / e;
veszteségek most sokkal kevesebb.
Ugyanebből az okból (mivel a csonkolás pontosság) helytelen működése összehasonlítása két különböző típusú reálváltozók vagy változó kifejezése (az utóbbi, mint már említettük, lehet kiszámítani Extended). Összehasonlítása tehát példa:
ha a hivatalos helyességét, és azt eredményezi nyilvánvalóságuk False - hamis, hiszen d kevesebb számjeggyel, mint pl. Általában, ha összehasonlítjuk a valódi értékek nem ellenőrzi a véletlen, egy bizonyos fokú eltérés. Ha ilyen mértékű hasonló pontossággal bemutató legtöbb durva számok, az értékeket lehet tekinteni egyenlő. Tehát, ha az az állapot, a legutóbbi példát kellene újraírni az alábbiak szerint:
ha Abs (d-e) <1.0Е-15 then.
Itt 1,0E-15 - a pontosság a változó típusát d (Double).
Mi továbbra is a listára az adott alkalmazás a koprocesszor. Jelenléte a számítógéphez, és az nagyban befolyásolja a munkát forduló kerekítés funkció: akkor kezd kerek sesquialteral értéket a legközelebbi páros egész (az úgynevezett „banki módszer”)! Például:
nélkül koprocesszor koprocesszor
Kerek (0.5) -> 1 forduló (0,5) -> 0
Kerek (1.5) -> 2 forduló (1,5) -> 2
Kerek (2.5) -> 3 forduló (2,5) -> 2
Kerek (3.5) -> 4 forduló (3,5) -> 4
A többi érték (anélkül, hogy”0,5' ) funkció megfelelően működik.
Néhány bajok megvárja szerelmeseinek a rekurzív megközelítés írásban funkciókat. Vannak, elvileg olyan helyzetben, amikor a rekurzív hívás verem túlcsordulás belső társprocesszorral adatokat akár nyolc szint rekurzió, és nem lesz összeomlik. Egy lehetséges megoldás az lenne, hogy olyan kifejezések, mint a sokféleség slozhnorekursivnyh Fn: = Fn (N-1) + Fn (N-2) a helyi változók, például az f1: = Fn (N-1); és f2: = Fn (N-2). Miután ezt a kifejezést a Fn: = F1 + F2 biztonságos legyen a koprocesszor.
Záró a téma egy koprocesszor, felidézzük ezt, és olyan fejlett, valós típusú, és a Real típus használata esetén koprocesszor 80X87 nyomtatott szereplők írása és WriteLn 4 számjegy a kitevő:
a $ N- WriteLn (123,4) ad 1.2340000000E + 02
de ad 1.234000000000000E át 0002 + $ N + WriteLn (123,4).
Ezt a tényt figyelembe kell venni, amikor formázott kimenetet és az átalakítás a szám a string Str eljárást.