Dokumetace k projektu pro pˇ redmˇ ety IZP a IUS
Iteraˇ cn´ı v´ ypoˇ cty projekt ˇ c. 2
19. listopadu 2011
Autor:
Vojtˇech Pˇrikryl,
[email protected] Fakulta informaˇcn´ıch Technologi´ı Vysok´e Uˇcen´ı Technick´e v Brnˇe
Obsah ´ 1 Uvod
3
2 Anal´ yza probl´ emu a princip jeho ˇ reˇ sen´ı 2.1 Funkce poˇc´ıtaj´ıc´ı arcsin(x) . . . . . . . . 2.1.1 Definice funkce . . . . . . . . . . 2.1.2 Taylor˚ uv rozvoj . . . . . . . . . . 2.2 Funkce poˇc´ıtaj´ıc´ı log a(x) . . . . . . . . 2.2.1 Definice funkce . . . . . . . . . . 2.2.2 Heuristika a pˇrevod mezi z´aklady 2.2.3 Taylor˚ uv rozvoj . . . . . . . . . . 2.3 Funkce poˇc´ıtaj´ıc´ı lomen´e ˇca´ry s chybou . 2.3.1 Obecn´a pozorov´an´ı . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
4 4 4 4 5 5 5 6 6 6
3 N´ avrh ˇ reˇ sen´ı probl´ emu 3.1 Funkce poˇc´ıtaj´ıc´ı arcsin(x) . . . . . . . 3.2 Funkce poˇc´ıtaj´ıc´ı log a(x) . . . . . . . 3.3 Funkce poˇc´ıtaj´ıc´ı lomen´e ˇca´ry s chybou 3.3.1 V´ ypoˇcet minima . . . . . . . . 3.3.2 V´ ypoˇcet maxima . . . . . . . . 3.4 Specifikace test˚ u. . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
7 7 7 8 8 8 9
. . . . . .
4 Popis ˇ reˇ sen´ı 11 4.1 Ovl´ad´an´ı programu . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 4.2 Implementace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 5 Z´ avˇ er
13
A Pouˇ zit´ a literatura
14
B Metriky k´ odu
15
2
´ 1. Uvod Tato dokumentace se t´ yk´a druh´eho projektu do pˇredmˇet˚ u IZP a IUS1 vyuˇcovan´ ych na VUT v Brnˇe, Fakultˇe informaˇcn´ıch technologi´ı. Zpracovan´ y program ˇreˇs´ı nˇekolik probl´em˚ u - v´ ypoˇcet funkc´ı arkus sinus a logaritmus o libovoln´em z´akladu, oboj´ı s pˇredem urˇcenou pˇresnost´ı a bez pouˇzit´ı funkc´ı z knihovny math.h. D´ale v´ ypoˇcet d´elky lomen´e ˇca´ry podle zadan´ ych souˇradnic v Euklidovˇe rovinˇe ve dvou variant´ach. U prvn´ı varianty se v´ ypoˇcet t´ yk´a pˇresnˇe urˇcen´ ych bod˚ u, ve druh´e variantˇe s chybou“ jsou zadan´e body zat´ıˇzeny absolutn´ı chybou ve smˇeru obou ” os x a y. Bod pak m˚ uˇze leˇzet kdekoliv ve ˇctverci, kter´ y je touto chybou urˇcen a u ´kolem je vypoˇc´ıtat maxim´aln´ı a minim´aln´ı celkovou d´elku. Lze si vˇsimnout, ˇze prvn´ı varianta je pouze speci´aln´ım pˇr´ıpadem druh´e varianty s absolutn´ı chybou rovnou nule (a s d˚ usledkem, ˇze minima a maxima jsou si rovny), proto budu rozeb´ırat pouze obecnou variantu s chybou“. ” Jelikoˇz se jedn´a o tˇri samostatn´e probl´emy (podprogramy), bude kaˇzd´emu z nich vˇenov´ana samostatn´a podkapitola. Rozeberu zde nejprve anal´ yzu vˇsech probl´em˚ u, d´ale n´avrh jejich ˇreˇsen´ı a nakonec popis samotn´eho ˇreˇsen´ı. Program byl naps´an v jazyce C a jeho rozhran´ı je textov´a konzole. Prov´adˇen´ y podprogram uˇzivatel zvol´ı pˇri spouˇstˇen´ı pomoc´ı parametr˚ u. V´ıce o tomto v kapitole 4.1.
1
´ IZP = Z´ aklady programov´ an´ı, IUS = Uvod do softwarov´eho inˇzen´ yrstv´ı
3
2. Anal´ yza probl´ emu a princip jeho ˇ reˇ sen´ı V t´eto kapitole se podrobnˇeji pod´ıv´am na anal´ yzu jednotliv´ ych probl´em˚ u z hlediska matematiky a pokus´ım se vypozorovat v´ yhodn´e vztahy pro pouˇzit´ı v programu.
2.1 Funkce poˇc´ıtaj´ıc´ı arcsin(x) 2.1.1 Definice funkce Funkce arkus sinus je inverzn´ı funkc´ı ke goniometrick´e funkci sinus. Jelikoˇz ale funkce sinus nen´ı prost´a1 , tak se arkus sinus omezuje na definiˇcn´ı obor D = h−1, 1i. Pozorov´ an´ı: Pokud na vstupu bude zad´ano ˇc´ıslo mimo definiˇcn´ı obor D, nemus´ım nic poˇc´ıtat a vr´at´ım hodnotu NAN2 . Pozorov´ an´ı: Funkce je lich´a3 , m˚ uˇzeme tedy poˇc´ıtat pouze v nez´aporn´e ˇc´asti oboru a pro z´aporn´ y vstup v´ ysledek pouze vyn´asobit konstantou −1.
2.1.2 Taylor˚ uv rozvoj Iteraˇcn´ı v´ ypoˇcet je vhodn´e poˇc´ıtat podle tzv. Taylorova polynomu, kter´ y dok´aˇze v okol´ı zvolen´eho bodu aproximovat jakoukoliv funkci. Tato funkce je ve tvaru polynomu - lze ji tedy spoˇc´ıtat pouze s vyuˇzit´ım z´akladn´ıch matematick´ ych operac´ı +, −, ∗, /, popˇr´ıpadˇe operac´ı z nich odvozen´ ych (mocnina, faktori´al,...). Pˇr´ımo pro arkus sinus existuje Taylor˚ uv rozvoj pro okol´ı bodu x = 0: arcsin x = x +
1 x3 1 3 x5 1 3 5 x7 + + + ... pro x ∈ (−1, 1), 2 3 24 5 246 7
1
Funkci f na definiˇcn´ım oboru D oznaˇcujeme jako prostou na D, pokud pro kaˇzd´e dvˇe hodnoty x1 6= x2 z D plat´ı f (x1 ) 6= f (x2 ). 2 NAN = makro z knihovny math.h, znamen´a Not A Number (=nen´ı ˇc´ıslem) 3 Funkce f(x) je lich´ a funkce, pokud pro vˇsechna x, pro kter´a je f(x) definov´ano, je definov´ano i f(-x) a plat´ı f (−x) = −f (x).
4
ale tento rozvoj je pro x bl´ıˇz´ıc´ı se kraj˚ um intervalu velice nepˇresn´ y. Proto jsem se rozhodl k v´ ypoˇctu pouˇz´ıt ekvivalentn´ı pˇrevod na arkus tangens a vyuˇz´ıt vlastnosti t´eto funkce. Pˇrev´est tyto dvˇe funkce mezi sebou lze podle tohto vzorce: x √ arcsin x = 2arctan . 1 + 1 − x2 D´ale jsem vyuˇzil vzorce pro zmenˇsen´ı argumentu funkce arkus tangens: x √ arctan x = 2arctan 1 + 1 + x2 a upravil tak argument do pˇr´ıhodnˇejˇs´ıho intevalu pro v´ ypoˇcet Taylorov´ ym polynomem pro arkus tangens, kter´ y vypad´a n´asledovnˇe: arctan x = x −
x3 x5 x7 + − + ... pro x ∈ h−1, 1i, 3 5 7
2.2 Funkce poˇc´ıtaj´ıc´ı log a(x) 2.2.1 Definice funkce Funkce loga (x) je inverzn´ı func´ı k funkci exponenci´aln´ı ax . Plat´ı mezi nimi ekvivalence: loga (x) = y ⇔ ay = x. Obor hodnot exponenci´aln´ı funkce je H = (0, ∞) a d´ıky inverzi tedy bude tento obor definiˇcn´ım oborem D funkce logaritmick´e. Pro z´aklad logaritmu a plat´ı podm´ınky a ∈ (0, ∞) − {1}, pˇriˇcemˇz pro a ∈ (0, 1) je logaritmus klesaj´ıc´ı, a pro a ∈ (1, ∞) je rostouc´ı. Pozorov´ an´ı: Pokud na vstupu bude zad´ano ˇc´ıslo mimo definiˇcn´ı obor D, nemus´ım nic poˇc´ıtat a vr´at´ım hodnotu NAN. Jedin´a v´ yjimka je pro hodnotu x = 0, ve kter´e je realizov´ana asympota a hodnota se bl´ıˇz´ı limitnˇe m´ınus (resp. plus) nekoneˇcnu pro rostouc´ı (resp. klesaj´ıc´ı) logaritmus.
2.2.2 Heuristika a pˇrevod mezi z´aklady Pro spr´avn´ y a pˇresn´ y v´ ypoˇcet bylo potˇreba udˇelat heuristiku. To znamen´a u ´pravit argument funkce do v´ yhodn´eho intervalu, pro kter´ y jsou v´ ysledky poˇc´ıtan´e iteraˇcn´ı metodou co nejpˇresnˇejˇs´ı. Toho mohu dos´ahnout d´ıky n´asleduj´ıc´ım vzorc˚ um: logxm = m · logx log(x · y) = log(x) + log(y) x = log(x) − log(y) logl y 5
Heuristiku jsem se rozhodl dˇelat pro bin´arn´ı logaritmus (tzn. o z´akladu 2), jelikoˇz to je pro procesor velice ˇsetrn´e (posun bit˚ u je primitivn´ı operace oproti dˇelen´ı obecn´ ym ˇc´ıslem) a tak´e to je pro pozdˇejˇs´ı implementaci pˇr´ıjemn´e (nen´ı nutno se starat o to, jestli je logaritmus rostouc´ı, nebo klesaj´ıc´ı,...). Pro n´asledn´ y pˇrevod mezi z´aklady vyuˇziji velice jednoduch´eho vztahu: loga (x) =
logb (x) . logb (a)
2.2.3 Taylor˚ uv rozvoj I pro v´ ypoˇcet logaritmu vyuˇzijeme Taylorova polynomu, kter´ y jsem kr´atce popsal na zaˇc´atku kapitoly 2.1.2. Jak jsem jiˇz naznaˇcil v pˇredchoz´ı podkapitole, budu poˇc´ıtat logaritmus pouze pro jeden z´aklad, nejvhodnˇejˇs´ı je pro to pˇrirozen´y logaritmus 4 znaˇcen´ y ln x. Existuje mnoho zp˚ usob˚ u, jak jej vyj´adˇrit pomoc´ı Taylorova polynomu, j´a jsem si vybral tento zp˚ usob: 1+y y y3 y5 y7 y9 x−1 ln(x) = ln =2 + + + + + · · · , kde y = , x>0 1−y 1 3 5 7 9 x+1
2.3 Funkce poˇc´ıtaj´ıc´ı lomen´e ˇc´ary s chybou Vstupn´ı posloupnost pro tento probl´em je interpretov´ana jako posloupnost dvojic souˇradnic v Euklidovˇe rovinˇe: x1 y1 x2 y2 x3 y3 x4 y4 x5 y5 ... Tyto souˇradnice jsou ovˇsem zat´ıˇzeny chybou stejnou ve smˇeru osy x i y. Nyn´ı tedy m˚ uˇzeme pro dva zadan´e body naleznout nekoneˇcnˇe mnoho r˚ uzn´ ych u ´seˇcek, kter´e je spojuj´ı (jelikoˇz bod v podstatˇe vn´ım´ame rozostˇrenˇe jako ˇctverec) a u ´kolem je nal´ezt minimum a maximum kaˇzd´ ych dvou po sobˇe zadan´ ych bod˚ u a vypisovat aktu´aln´ı souˇcet cel´e lomen´e ˇc´ary.
2.3.1 Obecn´a pozorov´an´ı Pˇri anal´ yze tohoto probl´emu si lze vˇsimnout, ˇze hledan´e u ´seˇcky mezi 2 d´ılˇc´ımi body budou m´ıt vˇzdy krajn´ı body leˇz´ıc´ı na stran´ach pomysln´eho ˇctverce okolo bodu. D´ale je v´ yhodn´e poˇc´ıtat nez´avisle na sobˇe ve smˇeru osy x a y. Urˇc´ım rozd´ıly x0 a y0 a v´ yslednou d´elku d u ´seˇcky vypoˇc´ıt´am pomoc´ı Pythagorovy vˇety: q d = x20 + y02 Postup jak nal´ezt x0 a y0 pop´ıˇsi v kapitole 3.3. 4
pˇrirozen´ y logaritmus je logaritmus o z´akladu e, coˇz je Eulerova konstanta
6
3. N´ avrh ˇ reˇ sen´ı probl´ emu 3.1 Funkce poˇc´ıtaj´ıc´ı arcsin(x) Pˇri ˇreˇsen´ı pouˇziji vztahy a pozorov´an´ı z kapitoly 2.1. Zejm´ena odfiltruji“ hod” noty mimo definiˇcn´ı obor a vyuˇziji lichosti funkce pro poˇc´ıt´an´ı v nez´aporn´e ˇca´sti definiˇcn´ıho oboru. D´ale si pˇriprav´ım argument pro iteraˇcn´ı v´ ypoˇcet Taylorov´ ym polynomem. Toho dos´ahnu cyklickou aplikac´ı vzorce arctan x = 2arctan
x √ 1 + 1 + x2
dokud x nebude leˇzet v intervalu (0, 0.1i. Z´aroveˇ n si znaˇc´ım, kolikr´at pak m´am celkov´ y v´ ysledek vyn´asobit aby byla proveden´a u ´prava v celkov´em d˚ usledku ekvivalentn´ı. Pro v´ ypoˇcet absolutn´ı pˇresnosti vyuˇziji znalost oboru hodnot, kter´ y je < − π2 ; π2 >. Z tohoto d˚ uvodu mohu urˇcit absolutn´ı pˇresnost eps ze zadan´eho poˇctu platn´ ych SIGDIG cifer SIGDIG vztahem eps = 0.1 . Taylor˚ uv polynom se pak zpˇresˇ nuje do t´e doby, neˇz absolutn´ı hodnota rozd´ılu dvou po sobˇe jdouc´ıch v´ ysledku je menˇs´ı neˇz eps.
3.2 Funkce poˇc´ıtaj´ıc´ı log a(x) Nejprve pohl´ıd´am speci´aln´ı pˇr´ıpady, napˇr. hodnoty mimo definiˇcn´ı obor, x = 0, x = 1, a = 1 a ukonˇc´ım funkci s vr´acen´ım pˇr´ısluˇsn´ ych hodnot. D´ale s vyuˇzit´ım pozorov´an´ı a vztah˚ u z kapitoly 2.2 uprav´ım argument i z´aklad logaritmu na interval (0.2, 2). Vypoˇc´ıt´am tedy nejdˇr´ıve celou ˇca´st v´ ysledn´eho logaritmu a Taylorovou ˇradou pak pouze desitinnou. Z tohoto d˚ uvodu mohu urˇcit absolutn´ı pˇresnost eps ze zadan´eho poˇctu platn´ ych SIGDIG cifer SIGDIG vztahem eps = 0.1 . Zvolen´ y Taylor˚ uv polynom pak iteruje do t´e doby, neˇz absolutn´ı hodnota rozd´ılu dvou po sobˇe jdouc´ıch v´ ysledku je menˇs´ı neˇz eps. Na konec provedu pˇreveden´ı na spr´avn´ y z´aklad a vr´at´ım v´ ysledek.
7
3.3 Funkce poˇc´ıtaj´ıc´ı lomen´e ˇc´ary s chybou Velikost chyby oznaˇc´ıme v n´asleduj´ıc´ım popisu jako ERR.
3.3.1 V´ypoˇcet minima Pro v´ ypoˇcet minim´aln´ı vzd´alenosti je nejd˚ uleˇzitˇejˇs´ı si uvˇedomit, ˇze d´elka i pro dva neidentick´e body m˚ uˇze b´ yt nulov´a. Stane se to, pokud se ˇctverce pˇrekr´ yvaj´ı, napˇr. pro A = [1, 1], B = [3, 3], ERR = 1. Potom bude pr˚ unikem obou ˇctverc˚ u bod o souˇradnic´ıch [2, 2]. Samozˇrejmˇe dva ˇctverce mohou m´ıt jako pr˚ unik i u ´seˇcku nebo pravo´ uheln´ık, ale i v tˇechto pˇr´ıpadech je minim´aln´ı vzd´alenost nulov´a, z´apornou zde nebereme v u ´vahu. Pro samotn´ y v´ ypoˇcet tedy nejdˇr´ıve analyzuji, v jak´em postaven´ı jsou zadan´e 1 ´ body. Nejdˇr´ıve si je um´ıst´ım podle osy x tak, aby x1 ≥ x2 (BUNO ). Nyn´ı rozhodnu, zda maj´ı ˇctverce pr˚ unik v pr˚ umˇetu na osu x. Pokud plat´ı nerovnost (x1 + ERR) ≥ (x2 − ERR) tak tento pr˚ unik existuje a x0 je tedy rovno nule. V opaˇcn´em pˇr´ıpadˇe pak plat´ı: x0 = (x2 − ERR) − (x1 + ERR). ypoˇcet provedu zcela analogicky. p Pro osu y pak v´ 2 2 D´ale dosad´ım do vztahu d = x0 + y0 z kapitoly 2.3.1
3.3.2 V´ypoˇcet maxima Pro v´ ypoˇcet maxim´aln´ı vzd´alenosti je tˇreba si uvˇedomit, ˇze d´elka nem˚ uˇze b´ yt nikdy nulov´a. Napˇr. i pro dva identick´e body A = [1, 1], B = [1, 1], ERR = 1. je vzd´alenost nenulov´a, protoˇze jako vzd´alenost m˚ uˇzeme vz´ıt protilehl´e body ˇctverce. √ V tomto pˇr´ıpadˇe je tedy d´elka u ´seˇcky 2 2. Pro samotn´ y v´ ypoˇcet znovu nejdˇr´ıve analyzuji, v jak´em postaven´ı jsou zadan´e ´ body. Znovu si je um´ıst´ım podle osy x tak, aby x1 ≥ x2 (BUNO). Nemus´ım vˇsak analyzovat pr˚ unik jako u minima, ale rovnou vypoˇctu x0 podle rovnosti: x0 = (x2 + ERR) − (x1p− ERR). Analogicky provedu v´ ypoˇcet pro osu y. D´ale 2 2 dosad´ım do vztahu d = x0 + y0 z kapitoly 2.3.1
1
´ BUNO = bez u ´jmy na obecnosti
8
3.4 Specifikace test˚ u V t´eto kapitole je popis testovac´ıch hodnot, jejichˇz u ´ˇcelem je ovˇeˇrit spr´avnost v´ ypoˇct˚ u a spr´avnost oˇsetˇren´ı chybn´ ych vstup˚ u. Vˇsechny testy arkus sinu a logaritmu jsem provedl a porovnal s knihovn´ıma funkcema (asin(double x), log(double x)) - v´ ysledky byly shodn´e. Test 1 Chybn´a syntaxe parametr˚ u −→ kontrola chyby ./proj2 ./proj2 ./proj2 ./proj2 ./proj2 ./proj2 ./proj2 ./proj2
--chyba --arcsin x1 --arcsin 5 5 --logax -2 1 --logax 5.2 1 --logax 5 -10 --lble -2
nedostatek parametr˚ u nezn´am´ y parametr nezn´am´ y znak pˇr´ıliˇs mnoho parametr˚ u za parametrem –arcsin z´aporn´a pˇresnost pˇresnost nen´ı cel´e ˇc´ıslo z´aklad logaritmu je z´aporn´ y z´aporn´a absolutn´ı chyba
Test 2 Spr´avnost v´ ypoˇctu pro --arcsin 10 vstup oˇcek´avan´ y v´ ystup 0 0.0000000000e+000 1 1.5707963268e+000 -1 -1.5707963268e+000 2 nan 1e-50 1.0000000000e-050 xprikr28 nan (+ukonˇcen´ı programu) Test 3 Spr´avnost v´ ypoˇctu pro --logax 10 a vstup z´aklad a oˇcek´avan´ y v´ ystup 0 2 -inf 5 2 2.3219280949 5 -2 nan 1e+50 10 5.0000000000e+001 10 1e-50 -2.0000000000e-002 1.02 1e300 2.8667239206e-005
9
Test 4 Spr´avnost v´ ypoˇctu pro --lbl vstup 0 0 1 0 2 0 1 1 0 10
oˇcek´avan´ y v´ ystup 0.0000000000e+000 1.0000000000e+000 2.0000000000e+000 3.4142135624e+000 1.2469598701e+001 -2 -3 2 5 1e20 0 6 14 0 0.0000000000e+000 8.9442719100e+000 1.0000000000e+020 2.0000000000e+020 nan Test 5 Spr´avnost v´ ypoˇctu pro --lble 2
vstup 001025
-2 5 8 -5 6
oˇcek´avan´ y v´ ystup 0.0000000000e+000 0.0000000000e+000 0.0000000000e+000 6.4031242374e+000 1.0000000000e+000 1.6698754378e+001 0.0000000000e+000 0.0000000000e+000 8.4852813742e+000 1.9798989873e+001 nan
10
4. Popis ˇ reˇ sen´ı 4.1 Ovl´ad´an´ı programu Program funguje v konzolov´em rozhran´ı, nedisponuje tedy ˇza´dn´ ym grafick´ ym prostˇred´ım. Pˇri spuˇstˇen´ı s parametrem -h informuje uˇzivatele o vˇsech ostatn´ıch moˇznostech parametr˚ u, to jsou: parametry -h –arcsin sigdig –logax sigdig a
–lbl –lble
popis Vytiskne n´apovˇedu V´ ypoˇcet arkus sinu, sigdig - pˇresnost zadan´a jako poˇcet platn´ ych cifer (pˇrirozen´e ˇc´ıslo) V´ ypoˇcet logaritmu, sigdig - pˇresnost zadan´a jako poˇcet platn´ ych cifer (pˇrirozen´e ˇc´ıslo), a - z´aklad logaritmu (nezaporn´e re´aln´e ˇc´ıslo) V´ ypoˇcet lomen´e ˇc´ary s pˇresnˇe zadan´ ymi body V´ ypoˇcet lomen´e ˇca´ry s chybou, ERR - absolutn´ı chyba mˇeˇren´ı souˇradnic (nez´aporn´e re´aln´e ˇc´ıslo)
Po spuˇstˇen´ı program oˇcek´av´a na standardn´ım vstupu (stdin) data typu popsan´eho v n´apovˇedˇe. Pokud je na vstupu pouˇzit jin´ y datov´ y typ nebo jin´e nezn´am´e znaky, program ukonˇc´ı v´ ypoˇcet a vyp´ıˇse chybov´e hl´aˇsen´ı na standardn´ı chybov´ y v´ ystup (stderr ). V pˇr´ıpadˇe u ´spˇeˇsn´eho zpracov´an´ı vstupn´ıch dat program pr˚ ubˇeˇzne vypisuje v´ ysledky na standardn´ı v´ ystup (stdout). Program automaticky konˇc´ı po pˇreˇcten´ı znaku EOF1 .
4.2 Implementace Program se na zaˇc´atku snaˇz´ı zpracovat parametry funkc´ı proccessParams, kter´a napln´ı pomoc´ı pˇr´ıstupu pˇres ukazatele parametry a vr´at´ı hodnotu, kter´a urˇcuje typ zvolen´eho podprogramu. V pˇr´ıpadˇe ˇspatnˇe zadan´ ych parametr˚ u nebo zad´an´ı parametr˚ u nespr´avn´eho typu se program ukonˇc´ı. V opaˇcn´em pˇr´ıpadˇe je program rozdˇelˇen na dva cykly, prvn´ı z nich se prov´ad´ı pokud je zvolen podporogram pro v´ ypoˇcet arkus sinu nebo logaritmu, druh´ y pokud je zvolen v´ ypoˇcet 1
EOF = End Of File - konec souboru
11
d´elky lomen´e ˇc´ary. D´ale se volaj´ı jednotliv´e funkce, kter´e zodpov´ıdaj´ı za v´ ypoˇcet hodnot. Jsou to funkce: funkce myArcsin myLog minLength maxLength
popis V´ ypoˇcet arkus sinu - tato funkce je tzv. obalovac´ı2 a vol´a se z n´ı funkce myArctan, kter´a je z hlavn´ıho programu nedostupn´a. V´ ypoˇcet logaritmu - tato funkce je tzv. obalovac´ı a vol´a se z n´ı funkce myLn, kter´a je z hlavn´ıho programu nedostupn´a. V´ ypoˇcet maxim´aln´ı hodnoty u lomen´e ˇca´ry s chybou V´ ypoˇcet minim´aln´ı hodnoty u lomen´e ˇca´ry s chybou
12
5. Z´ avˇ er Program poˇc´ıt´a u ´lohy podle vˇsech podm´ınek, kter´e byly v zad´an´ı. Je oˇsetˇren, aby se nikdy nezacyklil - pro jak´ ykoliv vstup bud’ dobˇehne v relativnˇe rychl´em ˇcase nebo ohl´as´ı chybov´e hl´aˇsen´ı a ukonˇc´ı ˇcinnost. D´ıky tomuto m˚ uˇze b´ yt souˇc´ast´ı jin´ ych program˚ u, skript˚ u nebo d´avkov´ ych soubor˚ u. V´ ypoˇcet lomen´e ˇca´ry s chybou byl ˇreˇsen sp´ıˇse analytick´ ym pohledem. Doporuˇcen´ y postup s pouˇzit´ım intervalov´e aritmetiky jsem nevyuˇzil. Na v´ ysledc´ıch by to nemˇelo nic mˇenit, ale do budoucna pl´anuji intervalovou aritmetiku vyzkouˇset a porovnat s aktu´aln´ım ˇreˇsen´ım. Program je pˇrenositeln´ y mezi r˚ uzn´ ymi operaˇcn´ımy syst´emy - byl testov´an na Windows 7, Linux a FreeBSD. Pˇri kompilaci s parametry -std=c99 -Wall -Werror -pedantic-errors -g -lm nebyla ohl´aˇsen´a ˇza´dn´a chyba ani varov´an´ı. Na vˇsech uveden´ ych syst´emech tak´e probˇehly u ´spˇeˇsnˇe vˇsechny testovac´ı hodnoty se shodn´ ym v´ ysledkem.
13
A. Pouˇ zit´ a literatura BARTSCH, H.: Matematick´e vzorce. Mlad´a fronta, a. s., 1996, ISBN 80-204-0607-7. HEROUT, P.: Uˇcebnice jazyka C. KOPP, 1994, ISBN 80-85828-21-9. KOPKA, H.; DALY, P.: LATEX - Podrobn´y pr˚ uvodce. Computer Press, 2004, ISBN 80-722-6973-9.
14
B. Metriky k´ odu Poˇ cet soubor˚ u: 1 soubor Poˇ cet ˇ r´ adk˚ u zdrojov´ eho textu: 328 ˇra´dk˚ u Velikost statick´ ych dat: 316B Velikost spustiteln´ eho souboru: 17 003B (syst´em Linux, 32 bitov´a architektura, pˇri pˇrekladu bez ladic´ıch informac´ı)
15