Facebook RSS feed
Zveme vás v pátek 31.10. na vánoční sraz komunity itnetwork.

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

Zpět do sekce Ruby

Ukázka zdrojového kódu pro výpočet čísla Pí pomocí nekonečné řady v jazyce Ruby.

1000000000.times do |i|
   a = 1;
   a = -1 if (i % 2 != 0)
   pi += a * (1.0/ ((i * 2) + 1))
 end
puts (pi * 4.0)


 

Program pro vás napsal David Čápka
Avatar
Autor je C# a PHP programátor, dále se věnuje webovým technologiím a redaktorské činnosti na ITnetwork. Rád své znalosti sdílí s komunitou a tak je rozšiřuje, věří, že smysl života je v poznání.
Unicorn College Autor se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

Jak se vám líbí článek?
Ještě nikdo nehodnotil, buď první!


 


Všechny články v sekci
Ruby
Tutoriály a ukázkové skripty v programovacím jazyce Ruby. Ukázkové programy se zdrojovým kódem, odkazy a popis syntaxe Ruby.
Další článek
Ruby v Linuxu - GTK
Jak udělat GTK aplikaci v jazyku Ruby.


 

 

Vaše komentáře:

Avatar


Avatar
:

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
Avatar
David Čápka
Moderátor
Avatar
Odpovídá na Lumír Kvita
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar


Avatar
:

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
Avatar
Odpovídá na Mick
Zdeněk Pavlátka:

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
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Mick
Kit:

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
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Panda38
Redaktor
Avatar
Odpovídá na Kit
Panda38:

Přece provázkem 8|

 
Odpovědět  +2 13.11.2013
Avatar
Kit
Redaktor
Avatar
Odpovídá na Panda38
Kit:

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

Odpovědět 13.11.2013
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.

 

Zobrazeno 7 z 7 zpráv

Přidat novou zprávu

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řihlaš. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.