IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – Výpočet čísla pi pomocou nekonečnej série

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Lumír Kvita
Nevyplnené
Avatar
Lumír Kvita:15.12.2011 16:23

ahoj je to prosim v jazyce C++? kdyz tam tohle prepisu tak se mi to nezkompiluje, mam prave tuto ulohu na projekt a sem zacatecnik a nevim si s tim rady tak hledam nejakou pomoc, mam vypocitat cislo pi s presnosti na 10 000 znaku coz nepokryjou standartni datove typy tak to mam pry vyresit pres jinou knihovnu ale pres kterou to fakt nevim. Dekuji :)

 
Odpovedať
15.12.2011 16:23
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na
David Hartinger:15.12.2011 19:51

Nevím, jestli je tento rozvoj zrovna vhodný pro takhle extrémně mnoho míst, je to docela pomalý výpočet a i po milionu cyklů máte jen několik desetinných míst. Na druhou stranu když to necháte běžet přes noc, mohlo by to nějak vypadat. Každopádně bych to potom raději zkontroloval, zda se ta čísla shodují.

Jinak by ten kód vypadal asi takto (trochu se divím, že si to neumíte převést sám, je to extrémně triviální):

velkedesetin pi = 0;
for (velkecelocis i = 0; i < 99999999999999999999999; i++) {
   a = 1;
 if (i % 2 != 0) a = -1;
 pi += a * (1.0/ ((i * 2) + 1));
}

Budete si stejně muset sehnat knihovnu pro práci s extrémně velkými čísly a jejich typy nahradit velkedesetin a velkecelocis.

Odpovedať
15.12.2011 19:51
New kid back on the block with a R.I.P
Avatar
Mick
Nevyplnené
Avatar
Mick:12.11.2013 18:18

Jaképak velkedesetin pi = 0; snad long double pi = 0;
a co je ta proměnná a?
Celý skript jsem se pokoušel sestavit takto:

#include <iostream>
using namespace std;
int main(){
long double pi = 0;

long int i;
int a;

for (i = 0; i < 99; i++) {
a = 1;
if (i % 2 != 0)
a = -1;
pi += a * (1.0/ ((i * 2) + 1));
}
cout << pi<<endl;
return 0;
}

Těch 99 jsem dal jen pro zkoušku (pokud se jedná o počet desetinných míst), a píše to 0.787923. Navíc jsem se udivil jakou podivnou metodou se to PI tady vypočítává. PI je Obvod kružnice ÷ průměr.

 
Odpovedať
12.11.2013 18:18
Avatar
Odpovedá na
Zdeněk Pavlátka:12.11.2013 18:47
  1. Používej ikonku vložit kód
  2. long int má obvykle stejný rozsah jako int(max 2147483647), takže v tomhle případě potřebuješ větší typ
  3. long double se také moc nehodí(přesnost na max 18 desetinných míst)
  4. Tady se počítá "přesné" pi, tedy součet nekonečné řady
Odpovedať
12.11.2013 18:47
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Kit
Tvůrce
Avatar
Odpovedá na
Kit:12.11.2013 20:18

Zapomněl jsi to vynásobit čtyřmi.

PI je Obvod kružnice ÷ průměr.
To je v pořádku, ale jak z toho chceš spočítat π?

Odpovedať
12.11.2013 20:18
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Panda38
Tvůrce
Avatar
Odpovedá na Kit
Panda38:13.11.2013 10:02

Přece provázkem 8|

 
Odpovedať
13.11.2013 10:02
Avatar
Kit
Tvůrce
Avatar
Odpovedá na Panda38
Kit:13.11.2013 10:06

Asi bych se raději spokojil s přesností tohoto algoritmu po pouhém miliónu iterací :)

Odpovedať
13.11.2013 10:06
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Michal Huff
Člen
Avatar
Michal Huff:28.2.2018 6:17

Pokud bychom chtěli být opravdu minimalisti, dal by se kód ještě zkrátit takto:

1000.times do |i|
        pi += (1.0 / ((i * 2) + 1)) * ((i % 2 != 0) ? -1 : 1)
end
puts (pi * 4)

Ale to už je asi moc velký extrém ;-)

 
Odpovedať
28.2.2018 6:17
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!