ARexx VI.JAN PETKOV
Pokud jste s námi absolvovali těch několik předchozích povídání o AREXXu
nejste už žádní nováčci v oboru. Proto jsem si pro vás připravil malou perličku,
která mne nedávno ozářila svým leskem.
Programátor Thomas Richter nebyl spokojen s rychlostí dodávané matematické
knihovny, proto věnoval pár dlouhých týdnů vývoji nové knihovny RexxMathLib.
Podle autorových vlastních slov je nové dílo asi desetkrát rychlejší než jeho
starší předchůdce. Potěšitelná je i skutečnost, že rexxmathlib.library je
FREEWARE, svolení autora potřebujete jen v případě komerčního využití produktu.
To není ovšem všechno, co si pro nás Thomas Richter připravil, v balíku najdeme
i patch pro všechny uživatele Workbenche 3.1, kde se po vzoru slavného Intelu
vyskytla chyba v matematické knihovně mathieeedoubbas.library. Ne že by snad měl
Thomas tolik volného času, ale jeho rexx knihovna tuto matematickou knihovnu
potřebuje. Pokud se vše podaří tak, jak má a hvězdy nám budou příznivé, najdete
kompletní balík na APD disku.
Podívejme se blíže na samotnou knihovnu. Jedná se o přepracovanou verzi knihovny
rexxmathlib, která je původně od Willyho Langeveldse. Nová rexxmathlib je
kompletně přepsána v assembleru, proto bylo taky dosaženo tak razantní zlepšení
rychlosti. Oproti starší verzi byla zvýšena i přesnost výpočtů. A aby toho
nebylo zase tak málo, přidal autor i několik nových funkcí.
Pokud toužíte po tom použít tuto programátorskou perlu ve svých ARexx
programech, vše co pro to musíte udělat je vsunout do svého programu tento
řádek:
call addlib(„rexxmathlib.library“,0,-30,0 )
Pak je vám k dispozici kterákoli z následujících funkcí:
ABS(x), FABS(x)
Výpočet absolutní hodnoty. ABS má shodné jméno s interní funkcí ARexxu, proto
použijte druhé jméno FABS, neprohloupíte, dostanete vyšší přesnost.
ACOS(x), ACOSH(x), ASIN(x), ASINH(x)
Odmyslete si úvodní „A“ a vězte, že máte inverzní funkci k odpovídajícímu
goniometrickému protějšku.
ATAN(x)
Inverzní tangent. Protože disponujeme pouze konečnou přesností, není výsledkem
argumentu PI/2 nekonečno, bohužel.
ATAN2(y,x), POL(x,y)
Vyčíslení argumentu komplexního čísla x+iy. Pozor na přehozené argumenty u
funkcí ATAN2 a POL. Pro argumenty musí platit podmínka, že x nebo y jsou různé
od nuly.
ATANH(x)
Inverzní tangent hyperbolický. Funkce je implementována pomocí identického
výrazu ATANH(x)=LN((1+x)/(1-x))/2, a proto může dojít k přetečení, jestliže
přeteče argument logaritmu.
CEIL(x)
Nejnižší celočíselná hodnota vyšší než X. Pozor na to, že se funkce chová trošku
jinak, ale přesto korektně, jeli argument záporný: CEIL(2.5)=3 ale CEIL(-2.5)=-2
COS(x)
Nic víc než cosinus. Bohužel díky omezené přesnosti je výsledek argumentu, který
se blíží nekonečnu víceméně náhodný.
COSEC(x), CSC(x)
Zasvěcení určitě poznali o co jde. Vy znalí věřte tomu, že opět díky omezené
přesnosti nedostanete pro celočíselné násobky čísla PI jako výsledek tolik
očekávané nekonečno.
COSH(x)
Hyperbolický cosinus pro argument: -700 < x < 700.
COT(x), COTAN(x)
Vyčíslí hyperbol. cotangentu pro x<>0. Pozor, díky nepřesnou nebude COT(PI/2)
roven nule.
E(x)
Vrátí číslo E s přesností na 17 číslic, přestože rexxmathlib pracuje pouze s
15.9 číslicemi a ARexx dokonce jen se 14.
EPSM(x)
Dostaneme nejvyšší číslo v plovoucí čárce nižší než x. Výsledek je dobrý tak
akorát pro mathrexxlib, protože pro ARexx je EPSM(x)=x.
EPSP(x)
Dostaneme nejnižší číslo v plovoucí čárce vyšší než x. Výsledek je dobrý opět
pouze pro mathrexxlib.
EXP(x)
Exponenciální funkce pro argument x < 700.
FACT(x)
Vypočítá faktoriál pro vstupní celočíselnou hodnotu v rozmezí x>=0 a x<=87. Pro
x menší 12 je výsledek vrácen jako integer, pro větší x je použita aritmetika v
plovoucí čárce, takže se může stát, že výsledek je neceločíselný.
FLOOR(x), INT(x)
Vrátí vám nejvyšší celé číslo menší než x. Jen vás upozorňujeme, že vyšší číslo
je jiné pro kladné a záporné hodnoty x, např. INT(2.5)=2 ale INT(-2.5)=-3.
FRACT(x)
Vrací desetinou část argumentu. Funkce je implementována pomocí identického
zápisu x-FLOOR(x), který nám umožní i lépe porozumět chování v kladné i záporné
části číselné osy, takže: FRACT(2.4)=0.4 ale FRACT(-2.4)=0.6
LN(x), LOG(x)
Přirozený logaritmus čísla x. Pracuje korektně pro všechna x>0.
LOG 10(x)
Dekadický logaritmus pro jakékoli x>0.
NINT(x)
Vrací nejbližší celé číslo k argumentu x. Opět máme jiné zaokrouhlování pro
opačné znaménko: NINT(2.5)=3 ale NINT(-2.5)=-2
PI()
Vyčíslí se hodnota PI s přesností na 17 číslic.
POW(x,y), POWER(x,y), XTOY(x,y)
Vrátí hodnotu výrazu X na Y-tou. Pro neceločíselný argument y musí být x>=0,
je-li y celé číslo, pak nezávisí na znaménku x ani y, ovšem x a y nesmí být
současně nulové ani příliš velké. Výraz 0 na 0tou by se neměl nikdy objevit,
třebaže starší verze rexxmathlibu jej dokázali obsloužit. Výraz 0 na 0tou totiž
není z matematického hlediska přesně definována může nabýt hodnoty 0 anebo 1.
ROOT(x,y)
Vrací Y-tou odmocninu z čísla X. Pro neceločíselné Y je požadováno X>=0. Hodnota
argumentu X by neměla být příliš velká a naopak Y příliš malé.
SEC(x)
Funkce vyčíslí secans argumentu.
SIN(x)
Starý známý sinus. Příliš velká hodnota x vede k náhodnému výsledku.
SINH(x)
Sinus hyperbolický pro -700 < x < 700
SQR(x), SQRT(x)
Druhá odmocnina z X, pro odmocniny všeobecně platí, že X má být větší nebo rovno
nule.
TAN(x)
Tangenta x (v radiánech jako vše). Nebojte se, konečná přesnost zaručí i zde, že
TAN(PI/2) není nekonečno. TANH(x)
Poslední z funkcí knihovny rexxmathlib je tangent hyperbolický.
Dnešní výklad byl poněkud stručný až suchopárný, snad byl alespoň přehledný a
bude vám nějakým způsobem užitečný. Vytlačiť článok
Pozn.: články boli naskenované ako text a preto obsahujú aj zopár chýb. Taktiež neručíme za zdrojové kódy (Asm, C, Arexx, AmigaGuide, Html) a odkazy na web. Dúfame, že napriek tomu vám táto databáza dobre poslúži.
Žiadna časť nesmie byť reprodukovaná alebo inak šírená bez písomného povolenia vydavatela © ATLANTIDA Publishing
none
|