AMIGA REVIEW obsah časopisu online!
  Domov     Software     Hry     Obaly     Download  

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

AMIGA REVIEW

57 ( 11-12 / 2000 )
56 ( 9-10 / 2000 )
55 ( 7-8 / 2000 )
54 ( 5-6 / 2000 )
53 ( 3-4 / 2000 )
52 ( 1-2 / 2000 )
 
51 ( 12 / 1999 )
50 ( 11 / 1999 )
49 ( 10 / 1999 )
48 ( 9 / 1999 )
46-47 ( 7-8 / 1999 )
45 ( 6 / 1999 )
44 ( 5 / 1999 )
43 ( 4 / 1999 )
42 ( 3 / 1999 )
41 ( 2 / 1999 )
40 ( 1 / 1999 )
 
39 ( 12 / 1998 )
38 ( 11 / 1998 )
37 ( 10 / 1998 )
36 ( 9 / 1998 )
35 ( x / 1998 )
34 ( x / 1998 )
33 ( 1-2 / 1998 )
 
32 ( 11-12 / 1997 )
31 ( 9-10 / 1997 )
30 ( 7-8 / 1997 )
29 ( 6 / 1997 )
28 ( 5 / 1997 )
27 ( 4 / 1997 )
26 ( 3 / 1997 )
25 ( 2 / 1997 )
24 ( 1 / 1997 )
 
23 ( 12 / 1996 )
22 ( 11 / 1996 )
21 ( 10 / 1996 )
20 ( 9 / 1996 )
18-19 ( 7-8 / 1996 )
17 ( 6 / 1996 )
16 ( 5 / 1996 )
15 ( 4 / 1996 )
14 ( 3 / 1996 )
13 ( 2 / 1996 )
12 ( 1 / 1996 )
 
11 ( 12 / 1995 )
10 ( 11 / 1995 )
9 ( 10 / 1995 )
8 ( 9 / 1995 )
7 ( 7 / 1995 )
6 ( 5 / 1995 )

ATLANTIDA NEWS

5 ( 3 / 1995 )
4 ( 1 / 1995 )
 
3 ( 11 / 1994 )
2 ( 9 / 1994 )
1 ( 7 / 1994 )
0 ( 5 / 1994 )