Algoritmusok

135 views
Skip to first unread message

Sanyi

unread,
Mar 13, 2010, 3:53:14 PM3/13/10
to számológép
Még a TI-Nspire topikban ( http://groups.google.hu/group/szamologep/browse_thread/thread/da15ef1096d2eadd
) merült fel a "tömbös", vagy "listás" módszer a nagyon nagy egész
számok vagy végtelenbe nyúló tizedestörtek (pl. pi) minél pontosabb
meghatározására.
A módszer szerintem régi, még tán egy informatika-tanárom vezetett rá,
és magam is többször "felfedeztem már" újra.
A lényeg: a számjegyeket tömbben tárolva az alapértelmezettnél jóval
pontosabban meghatározhatunk számokat.
Pl. egy egyszerű esetben (kissé pocsékolva) a tömb (lista) egy-egy
elemében egy-egy számjegyet (tizedesjegyet) tárolhatunk. Így akár,
megfelelő algoritmussal, ha a számológép mondjuk megengedi pl. 1000
elemszámú tömbök létrehozását, akár 1000 jeggyel (tizedesjeggyel) is
számolhatunk. No persze az algoritmus létrehozása ennél az egyszerű
elméletnél jóval bonyolultabb lehet ;)

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.

tolosa

unread,
Mar 14, 2010, 3:10:17 AM3/14/10
to számológép
Akkor inkább itt válaszolok Pipásnak is a felvetett problémára.

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.

Pipás

unread,
Mar 14, 2010, 4:33:06 AM3/14/10
to számológép
Kösz a választ Tolosa, kétszeresen is leszisszentem.:-)
1. Mikor rájöttem hogy a HP csak egész számokkal képes ekkora
hatványozásra.
2. Meg most mikor kiderült hogy a HP nem képes rá, csak az emulátor.:-
(
(Pedig már hergeltem magam hogy: Há, na ugye! Ilyesmire kell használni
egy ARM processzor teljesítményét!)
Azért még nem tettem le teljesen a csempészkörút gondolatáról.:-)

Pipás

unread,
Mar 14, 2010, 4:49:54 AM3/14/10
to számológép
Neked is kösz Sanyi, átrágtam magam az infókon. Akkor itt a
'túlcsordulás' azt jelenti hogy az eredmény több mint 10, vagyis ugrik
egy helyértéket. Egy példán bemutatva:
2^8= 256 -ot kiszámolva és egy 4 elemű listát véve az elemeket
egyenként a végétől visszafelé haladva kettővel beszorozva:
1. {0, 0, 0, 2} *2
2. {0, 0, 0, 4} *2
3. {0, 0, 0, 8} *2 < Itt több mint 10, az előző elemhez adok 1-et
4. {0, 0, 1, 6} *2
5. {0, 0, 3, 2} *2
6. {0, 0, 6, 4} *2 < Itt több mint 10, az előző elemhez adok 1-et
7. {0, 1, 2, 8} *2 < Itt több mint 10, az előző elemhez adok 1-et
8. {0, 2, 5, 6}

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

Message has been deleted
Message has been deleted
Message has been deleted

Pipás

unread,
Mar 14, 2010, 12:29:09 PM3/14/10
to számológép
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
Ugyanez TI-Basic nyelven:

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!

tolosa

unread,
Mar 14, 2010, 3:01:52 PM3/14/10
to számológép
Ha igaz, ennek a formulának van egy közvetlenebbül alkalmazható
változat is /zsebszámolón program nélkül alkalmazható/:

∞ (-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

tolosa

unread,
Mar 14, 2010, 3:08:06 PM3/14/10
to számológép
A HP-n 1000-es felső korláttal számolva kb. 12 mp-ig tart a futás és
az eredmény /a 4-el való szorzás után/ 3.14059265379

tolosa

unread,
Mar 14, 2010, 3:14:46 PM3/14/10
to számológép
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.

tolosa

unread,
Mar 14, 2010, 3:17:12 PM3/14/10
to számológép
A számlálóban a "k+1" kitevő után látható függőleges vonalnak nincs
matematikai jelentése, csak valamiért odakerült.

On márc. 14, 20:01, tolosa <tol...@freemail.hu> wrote:

Pipás

unread,
Mar 14, 2010, 3:43:40 PM3/14/10
to számológép
Köszi kipróbálom, de találtam egy érdekes linket szerintem azon a
honlapon, ahonnan Te a Pi hegyláncait ajánlottad.
http://t-t.freeweb.hu/minden/tudom/pii04.htm
Itt a Leibniz-sorozatról van szó. A cikk végén azt írja: Ami nekem 1.3
percig tartott (1000) lépés, az Pascalban Pentiummal 0.05 másodperc.
De ami a legfontosabb: minden újabb tizedesjegy kiszámítása
megtízszerezi a számítási időt. Azért ez elég durva, nem?

Sanyi

unread,
Mar 14, 2010, 3:55:56 PM3/14/10
to számológép
Jó hogy találtad ezt az oldalt Pipás, mert épp ezzel a Leibniz-
sorozattal terveztem közelíteni a pi-t... de akkor most már tudom,
hogy ezzel (főleg a Casio sebességével...) évek alatt sem számítanám
ki a pi-t 200-250 tizedesjegyig.... :)

Pipás

unread,
Mar 14, 2010, 3:58:59 PM3/14/10
to számológép
Szuper a képlet, a futásidő 1000-ig nálam 35 másodperc, az eredmény
3.14059265384, nálad ..379.
Hogy tetted fel ilyen alakban a fórumra?

On márc. 14, 20:01, tolosa <tol...@freemail.hu> wrote:

Pipás

unread,
Mar 14, 2010, 4:06:07 PM3/14/10
to számológép
Én is pont azon gondolkozom hogy ez a feladat nem a mi gépeinknek
való. Körömollóval nem érdemes nekiállni lenyírni a füvet egy
parkban.:-) De kisebb értékekig próba vagy szemléltetésképpen érdemes
kipróbálni. (Már írtam egyet délután Delphiben is csak még alakítgatni
kell. Gyorsabb lett mint a TI, de egy két plusz nulla után az is
belassul.)

tolosa

unread,
Mar 14, 2010, 4:31:22 PM3/14/10
to számológép
"Hogy tetted fel ilyen alakban a fórumra? "

Nehezen.:-)

Az XP karaktertábla segítségével.

Message has been deleted

tolosa

unread,
Mar 14, 2010, 4:37:00 PM3/14/10
to számológép
"Én is pont azon gondolkozom hogy ez a feladat nem a mi gépeinknek
való."

Viszont nagyon jól el lehet szórakozni ezekkel a dolgokkal, nem?:-)

Pipás

unread,
Mar 14, 2010, 4:45:25 PM3/14/10
to számológép
Ja és akkor összeraktad. Jól sikerült. Egyébként tényleg jó ez a
formula, Tolosa! Megmértem 10000-re is az időt, nálam 2 perc 20
másodperc. Ez 140/35= pont négyszeres futásidő, és nem tízszeres mint
az fenti linkben írták a Leibniz sorozatról. Mégis adott egy plusz
tizedesjegyet: 3.14149265359.

Pipás

unread,
Mar 14, 2010, 4:48:33 PM3/14/10
to számológép
Hát az nem kifejezés.:-)

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ó."
>

Message has been deleted
Message has been deleted
Message has been deleted

Pipás

unread,
Mar 15, 2010, 4:53:59 AM3/15/10
to számológép

Ez a formula 1000-re lassabb, 10000-re egy kicsit gyorsabb az
előzőnél.

∞ 1
1/6*π^2=∑ ---------
k=1 k^2

tolosa

unread,
Mar 15, 2010, 10:59:03 AM3/15/10
to számológép
Lehet, hogy már a könyökötökön jön ki, de talátam egy újabb formulát,
ami tényleg nagyon gyors.


π ∞ (2n)ˆ2
- = ∏ ------------------
2 n=1 (2n-1)*(2n+1)

tolosa

unread,
Mar 15, 2010, 11:00:50 AM3/15/10
to számológép
Wallis-formula a neve.

Pipás

unread,
Mar 15, 2010, 1:28:20 PM3/15/10
to számológép
Kipróbáltam, tényleg gyorsabb.
10000 lépésre 3.5 perc a 2' 20'' helyett, de 3 helyett 4 tizedes
pontosság.
5000 lépésre 3 tizedes pontosság 1 ' 55'' , 25 másodperccel hamarabb,
és fele annyi lépéssel mint az előző formuláddal.

Pipás

unread,
Mar 15, 2010, 1:30:55 PM3/15/10
to számológép
Csuda pofás képleteket tudsz már írni a Windows karakterkészlettel,
Tolosa! :-)

tolosa

unread,
Mar 15, 2010, 1:41:45 PM3/15/10
to számológép
Na ne! Te is ugyanúgy megírtad azt a képletet,nem?:)

tolosa

unread,
Mar 15, 2010, 1:45:14 PM3/15/10
to számológép
Az a baj, hogy az eredeti problémát nem tudom megoldani, akárhány
közelítő formulát találok, vagyis a tizedesjegyek számát nem tudom
növelni azon a bizonyos határon túl. Tehát max. annyi jegy lesz,
ahányat a zsebszámoló egyszerűen a PI lehívásával is adna.

tolosa

unread,
Mar 15, 2010, 1:50:45 PM3/15/10
to számológép
Most, hogy az utolsó formulával próbálkoztam, viszont arra jöttem rá,
hogy a HP-n nincs ∏ /szorzatösszeg/ funkció - vagy csak én nem
találom.
Ha esetleg valamelyikőtök felfedezné az emulátoron, ossza meg velem a
titkot.:-)

Pipás

unread,
Mar 15, 2010, 1:51:17 PM3/15/10
to számológép
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
A modern algoritmusoknál rögtön az elsőnél azt írja hogy 100 tizedesig
számol 3 lépésben, és trillió tizedes felett van 20 lépésben. :-o

tolosa

unread,
Mar 15, 2010, 2:21:38 PM3/15/10
to számológép
No, itt már olyan bonyolult formulák is vannak, hogy nem a
megértésükre, de még a számológépbe való hibátlan beírásukra sem
vállalkoznék.:-)

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

Pipás

unread,
Mar 15, 2010, 3:09:45 PM3/15/10
to számológép
Azért vannak benne érdekes dolgok a pl."Miscellaneous
approximations" (Vegyes megközelítések) részben. Például a

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

Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted

Litauszky György

unread,
Mar 16, 2010, 6:12:20 PM3/16/10
to szamo...@googlegroups.com
 
Még egy kis π:
Kíváncsi voltam hogy közelíti  π-t a Tolosa által beírt két képlet ezért ábrázoltam őket grafikusan a Plusszon.
Érdekes látni hogy amíg a Leibniz formula oszcillálva, addig a Wallis alulról közelít. Valószínűleg ennek köszönhetően  nagyobb a sebessége.
 
Leibniz formula:
       ∞  (-1) ˆ k+1
π/4=∑------------
      k=1      2*k-1
 
A hozzá tartozó függvény:
 
leibniz(in)
Func
 Local out
   ∑((-1)^(k+1)/(2*k-1),k,1,in)->out
 out*4->out
EndFunc
 
Wallis formula:

π    ∞        (2n)ˆ2
- = ∏    ------------------
2   n=1  (2n-1)*(2n+1)
 
A hozzá tartozó függvény:
 
wallis(in)
Func
 Local out
  ∏((2*n)^2/((2*n-1)*(2*n+1)),n,1,in)->out
 out*2->out
EndFunc
 
Függvénygörbék: 1. kép
Y szerkesztő:          2. kép
Ablakbeállítás:       3. kép
PIKEP.jpg
PIFUGGV.jpg
PIABLAK.jpg

Pipás

unread,
Mar 16, 2010, 6:13:39 PM3/16/10
to számológép
Nálam a Google képletöltésnél szerverhibát jelez.
Mindenesetre leírom ide is az ablakbeállításokat:
xmin=-1, xmax=19, xscl=1, ymin=2.64, ymax=4.01, yscl=.1, xres=6.

Sanyi

unread,
Mar 17, 2010, 2:23:09 AM3/17/10
to számológép
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-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:)

tolosa

unread,
Mar 17, 2010, 5:07:34 AM3/17/10
to számológép
Sanyi, Pipás!

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

tolosa

unread,
Mar 17, 2010, 5:11:04 AM3/17/10
to számológép
Az első 100000 jegyet az én gépemen /PC-n/ 1 perc 25 mp alatt
számította ki.

Sanyi

unread,
Mar 17, 2010, 5:41:38 AM3/17/10
to számológép
Hát, kihívásnak szép, de úgy látom, ez már kifog az én programozói
tudásomon...
Már régen foglalkoztam C-vel és C++-szal, s eléggé át kell magát
rágnia egy ilyen kódon az embernek, hogy megértse...
A kalkulátor nyelvére való átalakításról nem is beszélve...
Szóval ennek én nem merek nekiugrani, lelkesedés ide vagy oda :)
De jó kis program, az tény, köszi Tolosa!
(Ugyanakkor nagyon kíváncsi vagyok egy olyan programra - ha létezik
ilyen -, ami grafikus kalkulátoron számolgat pi jegyeket, akár csak
pár tíz vagy pár száz jegyig... :))

tolosa

unread,
Mar 17, 2010, 5:47:59 AM3/17/10
to számológép
Csak kíváncsiságból -egy másik hasonló progival- kiszámoltam az első
32 000 000 /32 millió/ számjegyét /ha valakinek kell, elküldöm egy 36
megás ".txt" -fájlban:-)/ és mindez 23 perc 8 mp-ig tartott.

tolosa

unread,
Mar 17, 2010, 5:50:13 AM3/17/10
to számológép
Hát igen, nekem is egy ilyenre fáj a fogam!
Aztán lehet, hogy már többször is ott volt az orrom előtt, csak-
megfelelő nyelvtudás nélkül- nem ismertem fel.

tolosa

unread,
Mar 17, 2010, 5:55:16 AM3/17/10
to számológép
Viszont az, hogy most már könnyedén hozzájuthatok egy ilyen hatalmas
méretű adathalmazhoz a PI-számjegyeiből, lehet, hogy kedvet ad nekem
régi hobbim újraélesztéséhez és elvégzek rajta néhány statisztikai
elemzést.:-)
Hátha éppen én fedezem fel benne azt a régóta kutatott
törvényszerűséget!:-)
Persze ez csak vicc a javából.:-)

Sanyi

unread,
Mar 17, 2010, 6:12:31 AM3/17/10