Kirjautuminen

Haku

Tehtävät

Koodit: Scheme: Piin likiarvo

Kirjoittaja: Hipo

Kirjoitettu: 26.10.2002 – 26.10.2002

Tagit: matematiikka, koodi näytille, vinkki

Rekursiivinen ja adaptiivinen piin likiarvon laskija schemellä. Jakaa ympyrän neliänneksen aina vaan pienempiin neliöihin kohdista joista täytyy. Lukee aluksi luvun, joka kertoo iteraatioiden määrän. Näyttäs tossa saavan jo 36 sekunnis (22 iteraatiota) arvon 3.14159107208251953125 (stalinilla käännettynä).

(define (circle x y) (<= (+ (* x x) (* y y)) 1))

(define (quad x y s)
  (list (circle x y)
        (circle (+ x s) y)
        (circle x (+ y s))
        (circle (+ x s) (+ y s)) ))

(define (oper-list oper l)
  (if (null? (cdr l))
      (car l)
      (oper (car l) (oper-list oper (cdr l))) ))

(define (and-list l) (oper-list (lambda (a b) (and a b)) l))
(define (or-list l) (oper-list (lambda (a b) (or a b)) l))

(define (sub-get-value n x y s)
  (/ (+ (get-value n x y s)
        (get-value n (+ x s) y s)
        (get-value n x (+ y s) s)
        (get-value n (+ x s) (+ y s) s)) 4) )

(define (get-value n x y s)
  (begin (define l (quad x y s))
         (if (and-list l)
             1
             (if (or-list l)
                 (if (> n 1) (sub-get-value (- n 1) x y (/ s 2)) 0)
                 0) )))

(define (pi n)
  (* (get-value n 0 0 1) 4.0))

(display (pi (read)))

Kommentit

Antti Laaksonen [27.10.2002 10:59:30]

#

Uusi ohjelmointikieli Ohjelmointiputkassa, hieno juttu ;)

Jaakko [27.10.2002 13:17:21]

#

likiarvo minkä kirjotit ei oo piin. piin on 3.1415926535....

thefox [27.10.2002 14:04:15]

#

Ohoh taitaa olla kommenttifilu miten sattuu :x Mutta hieno soodinpätkä.

Hipo [27.10.2002 16:31:54]

#

Joo, jos oikein nysvätään niin toi ei oo piin likiarvo, koska siin on liikaa desimaaleja, eli liian tarkka vastaus. En jaksanu miettiä miten lasketaan kuin tarkka toi arvo on tietämättä piin oikeeta arvoa. Ehkäpä rekursion ihan lopussa pitäis ottaa ylös pinta-ala, jota ei laskettu ja sen mukaan päätellä. Laitoin tohon siis kaikki desimaalit mitä ohjelmakin antoi. Kaikkihan tietää piistä ainaki 20 ekaa desimaalia, niin voi vertailla. :)

Kommenttifilu?

thefox [27.10.2002 18:51:22]

#

Tiedosto joka sisältää nämä kommentit.. oli kai vähän sekaisin tuossa aiemmin kun kommentti näkyi lähettäjänä, ip lähetysaikana jne.

Vilikki [27.10.2002 20:03:47]

#

Tuli muuten pari vuotta sitten opiskeltua piin 30 ekaa desimaalia. 3,1415926535 8979323846 2643383279...

Heikki [29.10.2002 18:00:46]

#

Mitenkäs pii lasketaan? En oikein tajua tota ohjelmointikieltä...

Hipo [30.10.2002 00:12:56]

#

Montaki tapaa laskea pii. Tämmönen nyt ekana tuli mieleen: yksikköympyrän pinta-ala on A=pii*1^2, saadaan suoraan pii=A/1^2. Ympyrän pinta-alalle saadaan likiarvo kun jaetaan se pieniin neliöihin ja ympyrän sisäl olevien pikkuneliöiden pinta-ala summataan.

Jesoft [21.03.2003 23:48:46]

#

Vanha tapa...

Heikki [19.10.2003 11:27:14]

#

Jos tarkkoja ollaan niin piin ekoja desimaaleja on tässä:

3,1415926535 8979323846 2643383279 5028841971 6939937510
5820974944 5923078164 0628620899 8628034825 3421170679
8214808651 3282306647 0938446095 5058223172 5359408128

Laskettu SuperPI nimisellä nopeustestiohjelmalla

miiro [25.12.2003 20:08:07]

#

mikäs ohjelmointikieli tämä on...?

miiro [25.12.2003 20:09:03]

#

ups olin huolimaton oliko se kieli scheme

BlueByte [07.08.2004 09:56:52]

#

aika epätarkka

Meitsi [16.10.2004 15:18:33]

#

Aikamoinen kikkare.

Juhko [31.10.2006 20:15:45]

#

Schemeä en omista, mutta piitä opin ulkoa! ;)

moptim [25.03.2007 11:58:59]

#

Pasteanko andwikistä?

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta