Egy egyszerű példa: kettő hatványainak meghatározása olyan szintig,
amire a számológép már nem lenne képes a beépített számábrázolásával:
Vegyünk egy tömböt. Az utolsó (mondjuk 1000.) elemébe írjunk be 2-t.
Szorozzuk be kettővel, s így tovább. Ha pár lépés után túlcsurdul (8
után 16-ra pl.), akkor az eggyel előtte lévő cellába, elembe írjuk be
az 1-et, az 1000.-ben pedig marad a 6.
Végigszorozzuk megint az elemeket (gyorsabb az algoritmus ugye, ha nem
mind az 1000-et szorozzuk, hanem figyelünk, hogy visszafelé hol
tartunk, tehát csak az utolsó 2-t, stb. szorozzuk), figyelve a
túlcsordulásokra.
Ez így ebben az egyszerű formában persze elég "helypocsékló" megoldás,
mivel 1-1 lista (tömb) cellában csak egy egész értéket, azaz egy
"számjegyet" tárolunk, cserébe viszont viszonylag gyors. Stb.
Hasonló elvet esetleg a pi közelítésére is használhatunk, valamilyen
közelítő módszert kellően átalakítva.
A lényeg: szerintem -és az eredményed szerint- csak az emulátor
viselkedik így. Elvégeztem én is a hatványozást a HP-n és bizony a 21-
es flag beállítása esetén bármilyen olyan számításnál, amikor az
eredmény nagyobb lenne 9.999.....9E499-nél, a gép "Overflow"
hibajelzést ad.
Ennek megfelelően például a 100^249 és akár a 100.5^249 is
értelmezhető eredményt ad, de a 100^250 művelet már túlcsordulást
eredményez.
Szóval valószínűleg az emulátor inkább a PC számábrázolási képességeit
tükrözi - ebben az esetben.
Határozottan ügyes. ;-)
On márc. 13, 21:53, Sanyi <cs...@freemail.hu> wrote:
> Még a TI-Nspire topikban (http://groups.google.hu/group/szamologep/browse_thread/thread/da15ef1...
Ahol
-> = STO
=< = Rombusz + 0
Használata: leibpi(ciklusszám)
leibpi(iter)
Prgm
Local n_it,nev
1->n_it:3->nev
1->res
While n_it=<iter
If n_it/2=iPart(n_it/2) Then
res+1/nev->res
Else
res-1/nev->res
Endif
n_it+1->n_it
nev+2->nev
EndWhile
Disp approx(res*4)
EndPrgm
Az egyszer már futtatott (előfordított) program futásideje
leibpi(1000) értékre 1 perc 18 másodperc a Plusszon. (Ja, Basic-ben
van.) Ekkor az eredmény:
3. 14259165434, két tizedes pontosságú.
Ha a " Disp approx(res*4)" sort behelyezzük a ciklusba az "EndWhile"
elé akkor a futás nyilván lelassul, de érdekes látni hogy közelít az
algoritmus 2 oldalról a Pi felé. A max. pontosság a TI számábrázolása
miatt 11 tizedesjegy Isten tudja mennyi idő alatt. :-)
Boldog Pi napot!
∞ (-1) ˆ k+1
π/4=∑-----------------
k=1 2*k-1
Na most lehet, hogy összekuszálódik ez a képlet...
On márc. 14, 17:29, Pipás <litauszky_gyo...@t-online.hu> wrote:
> A Pi nap örömére itt egy algoritmus Delphiben Pi értékének
> Leibnitz-féle sorral való kiszámítására.
> Pi = 4 * (1 - 1/3 + 1/5 - 1/7 + ...)http://falu.me/2009/01/13/a-pi-ertekenek-szamitasa-iteracios-modszerrel
On márc. 14, 20:01, tolosa <tol...@freemail.hu> wrote:
On márc. 14, 20:01, tolosa <tol...@freemail.hu> wrote:
Nehezen.:-)
Az XP karaktertábla segítségével.
Viszont nagyon jól el lehet szórakozni ezekkel a dolgokkal, nem?:-)
On márc. 14, 21:37, tolosa <tol...@freemail.hu> wrote:
> "Én is pont azon gondolkozom hogy ez a feladat nem a mi gépeinknek
> való."
>
∞ 1
1/6*π^2=∑ ---------
k=1 k^2
π ∞ (2n)ˆ2
- = ∏ ------------------
2 n=1 (2n-1)*(2n+1)
On márc. 15, 18:51, Pipás <litauszky_gyo...@t-online.hu> wrote:
> Hát nekem könnyű volt, mert csak átmásoltam a karaktereket a
> tiedből. ;-)
> Láttad már a Wikipedia Pi formuláit?http://en.wikipedia.org/wiki/Numerical_approximations_of_%CF%80
(2143/22)^(1/4)
képlet egy gombnyomásra kiadja a Pi-t nálam 8 tizedesre. Nyilván ez
nem ugyanaz a módszer, de azért érdekes.Van ilyen képlet 52
tizedesjegyre is.
Hétvégén én is fogalkoztam a témával, újra lefuttattam a nem túl
hatékony "direkt pi" véletlenszámos pi közelítő algoritmust:
http://szamologep.blogspot.com/2009/04/pi-kozelito-program-casio-grafikus.html
A korábbi kísérletnél 5316-ig futott a ciklus, és 4151 "véletlen-pont"
jutott a körbe, így pi értékére 3,1234... jött ki.
Most 17054-ig futtattam, 13388 volt a körben, így 3,14014... jött ki
pi-re.
(A Casio elég lassú, így ez kb. 4 órás futási időt jelentett:)
Találtam egy csoda kis programot, ami semmi perc alatt kiszámolja a PI
akárhány tizedesjegyét és a forrásfájl is hozzáférhető.
Mivel Ti vágjátok a programozást, én meg ahhoz kutyaütő vagyok, nincs
kedvetek kalkulátorra átdolgozni a programot?
http://www.pisymbol.com/apps/picalc/
Egy eredmény: /PC-n nem mérhetően rövid idő alatt kiszámolva/
3.
14159 26535 89793 23846 26433 83279 50288 41971 69399 37510
58209 74944 59230 78164 06286 20899 86280 34825 34211 70679
82148 08651 32823 06647 09384 46095 50582 23172 53594 08128
48111 74502 84102 70193 85211 05559 64462 29489 54930 38196
44288 10975 66593 34461 28475 64823 37867 83165 27120 19091
45648 56692 34603 48610 45432 66482 13393 60726 02491 41273
72458 70066 06315 58817 48815 20920 96282 92540 91715 36436
78925 90360 01133 05305 48820 46652 13841 46951 94151 16094
33057 27036 57595 91953 09218 61173 81932 61179 31051 18548
07446 23799 62749 56735 18857 52724 89122 79381 83011 94912
98336 73362 44065 66430 86021 39494 63952 24737 19070 21798
60943 70277 05392 17176 29317 67523 84674 81846 76694 05132
00056 81271 45263 56082 77857 71342 75778 96091 73637 17872
14684 40901 22495 34301 46549 58537 10507 92279 68925 89235
42019 95611 21290 21960 86403 44181 59813 62977 47713 09960
51870 72113 49999 99837 29780 49951 05973 17328 16096 31859
50244 59455 34690 83026 42522 30825 33446 85035 26193 11881
71010 00313 78387 52886 58753 32083 81420 61717 76691 47303
59825 34904 28755 46873 11595 62863 88235 37875 93751 95778
18577 80532 17122 68066 13001 92787 66111 95909 21642 01989
On márc. 17, 07:23, Sanyi <cs...@freemail.hu> wrote:
> Nagyon jó ez a pi közelítő kép Pipás.
>
> Hétvégén én is fogalkoztam a témával, újra lefuttattam a nem túl
> hatékony "direkt pi" véletlenszámos pi közelítő algoritmust:http://szamologep.blogspot.com/2009/04/pi-kozelito-program-casio-graf...
De ez inkább csak "érdekesség", mert ezzel még a gép beépített pi-jét
sem lehet nagyon elérni, már pár tizedesjegynyi pontosság elérése is
órákba telhet egy kalkulátoron.
http://www.angio.net/pi/bigpi.cgi
Sanyi, Tolosa !
Rájöttem valamire a Leibniz-sorozattal kapcsolatban ami szerintem
benneteket is érdekelni fog. A függvénygörbéből is látszik hogy
állandóan alá-fölé lövöldöz a pi-nek. Páros számnál alá, páratlannál
fölé.
Ha lefuttatjuk egy páros és a mellette lévő páratlan számra majd az
alsó értékhez hozzáadjuk a két eredmény különbségének a felét, akkor a
hibát megfelezzük.
Vagyis:
Leibniz(páros)->alsó
Leibniz(páros+1)->felső
π= alsó+(felső-alsó)/2
Például Tolosa képleteivel (a TI ∑ és ∏ utasítását használva):
Wallis(10000)= 4 tizedes, 3' 30''
Leibniz(10000)= 3 tizedes, 2' 20''
De (!)
Leibniz(5000)= 3 tizedes, 1' 20'' (alsó)
Leibniz(5001)= 1' 20'' (felső)
π= alsó+(felső-alsó)/2= 7 tizedes pontosság !
Végül is ez csak egy ötlet, de úgy néz ki hogy működik. Így a Leibniz
már gyorsabb mint a Wallis.
Névnapod alkalmából nagyon sok boldogságot kívánok!:-)
******
Úgy tűnik, azért a jó öreg Arkhimédész módszerénél nem nagyon van
gyorsabb formula a PI közelítő értékének számításához.:-)
Arkhimédész az egységsugarú kör köré írható érintősokszög kerületének
kiszámításával becsülte meg a PI értékét.
A levezetések utáni képlet:
K /kör/ = n* tg(180°/n)
-ahol n értékének növelésével fokozható a PI értékének pontossága.
n=10000-nél /ami zsebszámoló számára egy mérhetetlenül rövid
pillanatig tart/ már 6 értékes és pontos tizedesjegyet kapunk.
http://www.freeweb.hu/t-t/minden/tudom/pii01.htm
Valódi gépen lefuttattam...hááát...nagyon lassú.50 tizedesjegyet.60 mp
alatt állít elő. Először azt gondoltam, hogy a "dislay" utasításhoz
szünet van hozzárendelve /na, ezt ki is próbálom, hogy kiveszem a
kijelzést, elég,ha a végén teszi/, de nem.
Viszont tény, hogy ez a első program /az itt tárgyaltak közül/,
amelyik kalkulátoron állítja elő a PI számjegyeit.
Köszi, hogy közzétetted!
On márc. 18, 19:36, Litauszky György <litauszky_gyo...@t-online.hu>
wrote:
> Arkhimédész módszere az igazi, de az új jelszó a Newton formula. Megnéztem a Tical.org-on talált programot, az relatív dolog hogy lassú.http://www.ticalc.org/archives/files/fileinfo/388/38855.html
> Eddig ez a leggyorsabb módszer amivel találkoztam. 20 számjegyet a Plusszon 1 perc 10 másodperc alatt számol ki, az eredményt listában számjegyenként tárolja.
> Ezért fogtam magam, bemásoltam a programlistát az Nspire emulátorba, addig igazgattam még futni nem kezdett rajta. Most felteszem a fórumra így Ti is ki tudjátok próbálni.
> A Pidoc.tns-t kell megnyitni a File*>Open document... menüponttal. Futtatás: nspi(számjegyek száma). Írjátok meg sikerült-e a dolog.
> Az emulátoron villámgyors, kíváncsi vagyok hogy futhat az igazi kalkulátoron.
>
> A programlista is olvasható a dokumentumban, habár a kommenteket kiszedtem belőle. Szerintem ügyes program.
>
> Pi közelítő program TI-Nspire, Os 2.0:
> Pidoc.tns
>
> pikep.jpg
> 97KMegtekintésNézet
>
> Pidoc.tns
> 7KMegtekintésNézet
Szóval a valódi TI-Nspire gépen lassú a dolog.
Nem tudom, hogy az emulátoron van-e lehetőség a valós sebesség
beállítására. A HP-emulátornál kiválasztható, hogy a kalkulátor valós
sebességét is emulálja.
"10000-es felső korláttal számolva már jelentősen megnő a számolási
idő
-úgy 2 percre saccoltam- és a végeredmény:3.14149265367. "
Ez a Leibniz formula volt a HP-n 3 tizedesre beépített függvénnyel.
Ahhoz képest jelentősen gyorsabb, nem? A PC-vel nem szabad
összehasonlítani, mert:
1. A PC-ben jóval nagyobb processzor van.
2. A futtatott program lefordított exe, tehát compiler-es., a
számítógép gondolkodás nélkül lefuttatja.
A kalkulátor programja interperter-es (értelmezős), vagyis pl. minden
ciklusnál annyiszor értelmezi az utasításokat, ahányszor a ciklus
lefut. Emiatt akkor is lassabban futna, ha ugyanazon a gépen lenne
mint az előző.
Az meg hogy a kiiratás kiiktatásával nem sok időt nyertél, csak azt
jelenti hogy jól átgondolt helyre tette a program írója.
Közben át-átkukucskálok nehogy összeadjunk. Látom már Te is
gondolkodsz rajta, tényleg olyan lassú-e? :-)
On márc. 18, 20:40, tolosa <tol...@freemail.hu> wrote:
Leibniz: 2 tizedes 35 sec= 17.5 sec/számjegy
3 tizedes 140 sec= 46.6 sec/számjegy, lassul.
Wallis: 4 tizedes 210 sec= 52.5 sec/számjegy
Newton: 18 tizedes 70 sec= 3.8 sec/számjegy
Így nálam a Newton formula Basic programban futtatva és listát
készítve a beépített függvényt használó Leibniz(∑) formulánál 4.6-szor
és 12.3-szor, a Wallis(∏) képletnél 13.8-szor gyorsabb. Persze azért
új világcsúcsot nem fogunk vele felállítani. :-)
Ezek természetesen nem pontos mérések, nem tudni hogy változna a dolog
több tizedesjegynél.
∞ 16(-1)^(k+1) ∞ 4(-1)^(k+1)
π = ∑ ----------------------- - ∑ ------------------------
k=1 (2k-1)5^(2k-1) k=1 (2k-1)239^(2k-1)
Nem jött össze a másolás, maradt a bevált módszer. :-) Beírva a gépbe
ez is gyors. Mondjuk lassabb mint a program és csak annyi tizedest
lehet megnézni, amennyit a kalkulátor képes ábrázolni. (13
tizedesjegy= 2 másodperc)
Valamint véletlenszámokkal és egy egyszerű algoritmussal rajzoltam
egy szép pi-t:
http://szamologep.blogspot.com/2010/03/muveszi-pi-szimbolum-casio-gra...
On márc. 21, 16:50, Sanyi <cs...@freemail.hu> wrote:
> A második linket elírtam, itt a jó:http://szamologep.blogspot.com/2010/03/muveszi-pi-szimbolum-casio-gra...
On márc. 21, 20:24, Sanyi <cs...@freemail.hu> wrote:
> Köszi :) Így igaz, a nekifutás, az "út" is fontos dolog.
> A pi-kiszámoló programot a Casio nyelvének sajátosságait kihasználva
> sikerült tömörítenem is egy kicsit, azt hiszem olyan 540 byte volt
> eredetileg, és kb 470-re sikerült lefaragnom.
> Ha megnézed az "átmenetes pi" rajzoló forráskódját pl. (http://szamologep.blog.hu/2010/03/21/pi_szimbolum_grafika), a => jel
Pipás, való igaz, nem kell mindig a "kályhától" elindulni, mert akkor
tényleg nem nagyon haladna a fejlődés.
De jó érzés felfedezni a dolgokat, ezért irigylem a nagy
felfedezőket :)
És a Code Codex linket is köszi, eddig nem ismertem az oldalt:
http://www.codecodex.com/wiki/Digits_of_pi_calculation
A pi-rajzoló programot megfogalmaztam általánosan:
Képernyőtörlés;
Grafikus ablak: xmin=0, xmax=1.75 , ymin=0, ymax=1;
P legyen 0;
Ciklus: M legyen 1, és menjen egyesével jó sokáig (pl. 22500-ig)
X legyen 1.75*random;
Y legyen random;
S legyen 1;
Ha x > 0.25 és X < 1.5 és Y < 0.688 és Y < 0.937 akkor S legyen 0;
Ha x > 0.5 és X < 0.75 és Y < 0.063 és Y < 0.937 akkor S legyen 0;
Ha x > 1 és X < 1.25 és Y < 0.063 és Y < 0.937 akkor S legyen 0;
Ha S = 1
Akkor
B logikai változó legyen, az hogy (random > Y)
C logikai változó legyen, az hogy (random > Y)
D logikai változó legyen, az hogy (random > Y)
különben
B logikai változó legyen, az hogy (random < Y)
C logikai változó legyen, az hogy (random < Y)
D logikai változó legyen, az hogy (random < Y)
Elágazás vége
Ha B igaz és C igaz és D igaz
Akkor
rajzold ki az X,Y képpontot
növeld 1-el a P változót (ami csak arra kell, hogy hány képpontot
rajzolt már ki)
Ciklus vége