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
Download

Iteracn´ı výpocty