Výpočet Pi
Pro procvičení volání funkcí a algoritmů je možné použít různé způsoby pro výpočet hodnoty čísla Pi. Existují různé metody/postupy/algoritmy. Níže uvádíme některé z nich. Pokuste se zjistit jak jsou přesné v závislosti na počtu „kroků“ výpočtu (krokem může být počet cyklů, hodnot, členů rozvoje …). U některých hodnot možná narazíte na nedostatečnou přesnost datového typu.
Získané hodnoty pi porovnejte s konstantou dodanou v překladači (o kolik procent se vypočtená hodnota liší v závislosti na délce výpočtu ...). Její definice není součástí normy, je ale přístupná pomocí knihovny math.h, ale musí se ještě povolit přístup k těmto proměnným pomocí podmíněného překladu:
#define _USE_MATH_DEFINES // for C #include <math.h>
Název definované konstanty je M_PI (v jiných překladačích to může být jinak!).
Metoda výpočtu ze vzorce – řady
Hodnotu Pi lze vypočítat pomocí řady:
Proveďte „optimalizaci“ výpočtů → yvolte postup s co nejméně výpočtz (volte jednodušší operace (* je lepší než /, kvadrát je lepší než odmocnina …).
Zvolte vhodný typ pro proměnné.
Určete jakám způsobem (kdy) ukončit výpočet (pevný počet kroků, změna v absolutní/relativní hodnotě menší než X, …)
Nakreslete vývojový diagram výpočtu.
Naprogramujte
Program otestujte
Pomocí trojúhelníků
Kružnici/kruh můžeme sestavit z trojúhelníků. Pokud posčtítáme délky stran trojúhelníků na obvodu, dostaneme obvod kruhu. Dáme-li ho do relace s poloměrem/průměrem, získáme konstantu, která by měla být úměrná pi. Čím více trojúhelníků použijeme, tím přesnější výpočet bude.
Představmě si čtverec, spojením středu s jeho vrcholu dostaneme čtyři trojúhelníky, které mají čtyři vnější strany (obvod čtverce je tedˇ i nepřesným obvodem kružnice) – máme tedy N stran. Pro výpočet je lépe vycházet z pravoúhlého trojúhelníku, a proto si trojúhelníky rozdělíme na poloviny. Máme tedy osm půlstran obvod = 2 N půlstran. Úhel strany je 360/N, úhel úseku 180/N. Úsek = R . sin (úhlu).
Pro malé úhly (zadané ve stupních, nebo radiánech? Co je malý úhel?) můžeme předpokládat, že sin (úhel)=úhel, což zjednoduší a urychlí výpočty.
Z počtu úseků tedy vypočteme vrcholový úhel trojúhelníku. Z něj a z poloměru vypočteme délku jednoho úseku. Ze počtu úseků vypočteme obvod. Za pomoci obvodu a poloměru určíme hodnotu Pi.
Pomocí srovnání plochy kruhu a čtverce
Tento algoritmus má několik variant
Varianta s náhodnými čísly.
Zvolíme rozměr čtverce, který použijeme k výpočtu. Čtverec může reprezentovat celou plochu – v něm je vepsaná kružnice, nebo pouze čtvrtinu (zde ovšem jedna z os ke čtverci „nepatří“ - body na ní by se počítali do dvou sousedících čtverců)
Náhodně vygenerujeme x a y souřadnice bodu v ploše čtverce.
Náhodné body lze nahradit i body rovnoměrně rozmístěnými. Zjistíme,
zda vzdálenost bodu od počátku je menší nebo větší než poloměr. Pokud
je menší, připočteme jedničku (k ploše) kruhu i čtverce. Pokud je
větší než poloměr, připočteme jedničku pouze k ploše čtverce. Počet
bodů je úměrný obsahu plochy – z poměru obsahů čtverce a
kružnice opět můžeme vypočítat hodnotu Pi.
Druhá varianta
Tato varianta počítá plochu přímo – například pomocí numerické integrace plochy pod křivkou, kdy na kružnici i čtverci budeme volit body s různým krokem a počítat plochu, kterou vytvoří spojnice těchto bodů a kolmic na osu x.
A další varianty ...
Poslední změna 2014-02-07