NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Výpočet čísla pi pomocí nekonečné řady

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Lumír Kvita
Neregistrovaný
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 :)

 
Odpovědět
15.12.2011 16:23
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá 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.

Odpovědět
15.12.2011 19:51
New kid back on the block with a R.I.P
Avatar
Mick
Neregistrovaný
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.

 
Odpovědět
12.11.2013 18:18
Avatar
Odpovídá 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
Odpovědět
12.11.2013 18:47
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Kit
Tvůrce
Avatar
Odpovídá 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 π?

Odpovědět
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
Odpovídá na Kit
Panda38:13.11.2013 10:02

Přece provázkem 8|

 
Odpovědět
13.11.2013 10:02
Avatar
Kit
Tvůrce
Avatar
Odpovídá 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í :)

Odpovědět
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 ;-)

 
Odpovědět
28.2.2018 6:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.