Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

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 :)

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ť
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.

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ť
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ť
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Panda38
Člen
Avatar
Odpovedá na Kit
Panda38:13.11.2013 10:02

Přece provázkem 8|

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ť
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 ;-)

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.

Zobrazené 8 správy z 8.