Home page

PC2A home page

Výuka home page




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