Seuraa 
Viestejä768

Ylläoleva laskukaava on kuulemma yksi nopeiten suppenevista. Yritän REBOL-kielellä laskea edes muutaman desimaalin oikein, mutta ei onnistu. REBOL-kielessä merkintä "power 5 n" tarkoittaa 5:n korottamista n:teen potenssiin. Osaatteko tehdä jollain kielellä toimivan koodin tai kertoa missä mun koodissa on virhe? Otan noita termejä sitten 10 tai 20, niin saan tulokseksi saman luvun 3.18326359832632.

Tässä vielä loopissa käyttämäni sijoitus lauseke tekstinä:
pii: pii + (4 / (n * power 5 n)) - (4 / ((n + 2) * power 5 (n + 2))) - (1 / (n * power 239 n)) + (1 / ((n + 2) * power 239 (n + 2)))

Bernard Shawn: ”Tiede on aina väärässä: se ei koskaan ratkaise ongelmaa luomatta kymmentä lisää.”

Sivut

Kommentit (43)

Keckuli
Seuraa 
Viestejä768

Neutroni kirjoitti:
Siinä varmaan pitäisi olla n = n+2:n tilalla n = n+4, koska n kasvaa aina kahdella ja lasket kaksi termiä kerrallaan.

Totta., Ehdit vastata ennen kuin minä :) Tämä koodi toimii. Nyt aion vääntää tuon koodin Pytrhonille ja laskea itse miljoona piin desimaalia :)

Bernard Shawn: ”Tiede on aina väärässä: se ei koskaan ratkaise ongelmaa luomatta kymmentä lisää.”

Sisältö jatkuu mainoksen alla
Sisältö jatkuu mainoksen alla
Keckuli
Seuraa 
Viestejä768

Neutroni kirjoitti:
Luulen, että se menee helpommin sillä pii/4 = 1 + 1/3 - 1/5 + 1/7 - ... kaavalla, niin ei tarvita potenssiinkorotuksia.

Meinaatko tehdä kertolaskut FFT-algoritmilla?

Tuosta sarjakehitelmästä sanotaan:
https://fi.wikipedia.org/wiki/Pii_(vakio)
"Tämä sarja suppenee kuitenkin liian hitaasti, jotta sitä kannattaisi käyttää piin likiarvojen laskemiseen. Siitä olisi laskettava vähintään 294 ensimmäistä termiä, jotta saataisiin edes kaksidesimaalinen likiarvo 3,14"

Tuolla toisella sarjakehitelmällä ei tarvitse laskea kuin 6 (12) ensimmäistä termiä, niin saadaan piille likiarvo REBOL-kielen tarkkuudellaa oikein 3.14159265358979.

Ihan tavallisella kertolaskulla teen kertolaskut. Mulla on käytössä Pythonin gmpy2 ohjelma kirjasto ja sieltä mpfr, mikä mahdollistaa laskujen tekemisen miljoonien desimaalien tarkkuudella. Yllä koodi, joka ei tosin vielä toimi. Olen ihan vasta-alkaja Pythonin ohjelmoinnissa.

Bernard Shawn: ”Tiede on aina väärässä: se ei koskaan ratkaise ongelmaa luomatta kymmentä lisää.”

Neutroni
Seuraa 
Viestejä35108

Keckuli kirjoitti:

"Tämä sarja suppenee kuitenkin liian hitaasti, jotta sitä kannattaisi käyttää piin likiarvojen laskemiseen. Siitä olisi laskettava vähintään 294 ensimmäistä termiä, jotta saataisiin edes kaksidesimaalinen likiarvo 3,14"

Tuolla toisella sarjakehitelmällä ei tarvitse laskea kuin 6 (12) ensimmäistä termiä, niin saadaan piille likiarvo REBOL-kielen tarkkuudellaa oikein 3.14159265358979.

Ei se sitten tuo ollut. Milläköhän joskus leikin. Siinä taisi olla jotain arkustangentteja. Ehkä tämä: https://en.wikipedia.org/wiki/Machin-like_formula  ..

Se oli joskus opiskeluaikana ja muistaakseni kymmeniä tuhansia desimaaleja sai laskettua nopeasti omilla tyhmillä kertolaskurutiineilla.

Lainaus:
Ihan tavallisella kertolaskulla teen kertolaskut. Mulla on käytössä Pythonin gmpy2 ohjelma kirjasto ja sieltä mpfr, mikä mahdollistaa laskujen tekemisen miljoonien desimaalien tarkkuudella. Yllä koodi, joka ei tosin vielä toimi. Olen ihan vasta-alkaja Pythonin ohjelmoinnissa.

OK. Se on tietysti fiksua käyttää toimivaksi tiedettyjä kirjastoja. Minulla on vain pakkomielle koodata kaikki itse, jos teen itselle.

Kokeilin joskus FFT-kertolaskua 9^(9^9):n laskemiseen. Jätin työkoneen jauhamaan kesäloman ajaksi. Se laski reilut 20 vuorokautta, sai tuloksen, jossa oli oikea määrä numeroita ja ensimmäiset oikein, mutta viimeiset puuta heinää. En jaksanut sen enempää ihmetellä sitä. Siihen aikaan sen kokoista lukua ei saanut kerralla muistiin, vaan se oli kovalevyllä useana tiedostona ja vain osa kerrallaan muistissa. Siksi siihen meni niin älyttömästi aikaa.

PPo
Seuraa 
Viestejä15336

Keckuli kirjoitti:
Ylläoleva laskukaava on kuulemma yksi nopeiten suppenevista. Yritän REBOL-kielellä laskea edes muutaman desimaalin oikein, mutta ei onnistu. REBOL-kielessä merkintä "power 5 n" tarkoittaa 5:n korottamista n:teen potenssiin. Osaatteko tehdä jollain kielellä toimivan koodin tai kertoa missä mun koodissa on virhe? Otan noita termejä sitten 10 tai 20, niin saan tulokseksi saman luvun 3.18326359832632.

Tässä vielä loopissa käyttämäni sijoitus lauseke tekstinä:
pii: pii + (4 / (n * power 5 n)) - (4 / ((n + 2) * power 5 (n + 2))) - (1 / (n * power 239 n)) + (1 / ((n + 2) * power 239 (n + 2)))

n=1

pii=0

pii=pii+(-1)^(n+1)/(2n-1)*(4/5^(2n-1)-1/239^(2n-1))

Keckuli
Seuraa 
Viestejä768

Ei toimi, ei toimi. Nollaa pukkaa tulokseksi. Yo. ohjelma tulostaa:

(mpfr('0.0',100), datetime.timedelta(0, 0, 297000))

Virhe täytynee olla tuossa sijoituslausekkeessa:
pii2=pii2+(4/(ind*(5**ind)))-(4/(((ind+2)*5**(ind+2))))-(1/(ind*239**ind))+(1/((ind+2)*239**(ind+2)))
REBOL-kielen sijoituslauseke, joka toimi:
pii: pii + (4 / (n * power 5 n))  - (4 / ((n + 2) * power 5 (n + 2))) - (1 / (n * power 239 n))  + (1 / ((n + 2) * power 239 (n + 2)))

Olen nyt puoli tuntia sitä tuijottanut tupta Python kielen sijoituslauseketta, mutta en näe siinä virhettä.

Bernard Shawn: ”Tiede on aina väärässä: se ei koskaan ratkaise ongelmaa luomatta kymmentä lisää.”

Keckuli
Seuraa 
Viestejä768

Neutroni kirjoitti:
Neutroni kirjoitti:
Ei se sitten tuo ollut. Milläköhän joskus leikin. Siinä taisi olla jotain arkustangentteja. Ehkä tämä: https://en.wikipedia.org/wiki/Machin-like_formula

-

Tuo on muuten täsmälleen sama kuin sinun kaava.

Joo, mutta siitä ollaan arkustangentin Taylorin sarjakehitelmän avulla saatu minun käyttämä sarjakehitelmä.

Bernard Shawn: ”Tiede on aina väärässä: se ei koskaan ratkaise ongelmaa luomatta kymmentä lisää.”

Keckuli
Seuraa 
Viestejä768

Neutroni kirjoitti:
Neutroni kirjoitti:
Ei se sitten tuo ollut. Milläköhän joskus leikin. Siinä taisi olla jotain arkustangentteja. Ehkä tämä: https://en.wikipedia.org/wiki/Machin-like_formula

-

Tuo on muuten täsmälleen sama kuin sinun kaava.

Ai niin se olikin Neutroni, joka kirjoitti minulle "sinä=minä" Luulin, että joku muu kirjoitti Neutronille, että Neutroni käytti samaa sarjakehitelmää...

Bernard Shawn: ”Tiede on aina väärässä: se ei koskaan ratkaise ongelmaa luomatta kymmentä lisää.”

Keckuli
Seuraa 
Viestejä768

Vaikka tuosta yksinkertaisemmasta algoritmista laskee kymmenen miljoona ensimmäsitä termiä, niin ei saa kuin:
3.14159245358978 eli kuusi desimaalia oikein
>>
oikea pii:
3.14159265359265

Bernard Shawn: ”Tiede on aina väärässä: se ei koskaan ratkaise ongelmaa luomatta kymmentä lisää.”

Keckuli
Seuraa 
Viestejä768

Keckuli kirjoitti:

oikea pii:
3.14159265359265

Eiku:

3.14159265358979

Mutta kuitenkin vain kuusi desimaalia 10 miljoonalla termillä.

Bernard Shawn: ”Tiede on aina väärässä: se ei koskaan ratkaise ongelmaa luomatta kymmentä lisää.”

Keckuli
Seuraa 
Viestejä768

PPo kirjoitti:
Keckuli kirjoitti:
Ylläoleva laskukaava on kuulemma yksi nopeiten suppenevista. Yritän REBOL-kielellä laskea edes muutaman desimaalin oikein, mutta ei onnistu. REBOL-kielessä merkintä "power 5 n" tarkoittaa 5:n korottamista n:teen potenssiin. Osaatteko tehdä jollain kielellä toimivan koodin tai kertoa missä mun koodissa on virhe? Otan noita termejä sitten 10 tai 20, niin saan tulokseksi saman luvun 3.18326359832632.

Tässä vielä loopissa käyttämäni sijoitus lauseke tekstinä:
pii: pii + (4 / (n * power 5 n)) - (4 / ((n + 2) * power 5 (n + 2))) - (1 / (n * power 239 n)) + (1 / ((n + 2) * power 239 (n + 2)))

n=1

pii=0

pii=pii+(-1)^(n+1)/(2n-1)*(4/5^(2n-1)-1/239^(2n-1))

(Vielä viimeinen yöllinen spämmäys aiheesta pii, sitten menen jatkamaan unia)

En saa tuota tiivisttetynpääkään lauseketta toimimaan:

Nollaa pukkaa, nollaa pukkaa. Virhe täytyy olla siis muualla kuin sijoituslausekkeessa?

Bernard Shawn: ”Tiede on aina väärässä: se ei koskaan ratkaise ongelmaa luomatta kymmentä lisää.”

PPo
Seuraa 
Viestejä15336

PPo kirjoitti:
Annoin WA:lle

∑4*(-1)^(n+1)/(2n-1)*(4/5^(2n-1)-1/239^(2n-1)),n=1 to 20, joka laski

3.141592653589793238462643383271236577919312610350012125021

 n=1 to 10

3.141592653589791696917279619620105448140651982932603963889

PPo
Seuraa 
Viestejä15336

PPo kirjoitti:
Annoin WA:lle

∑4*(-1)^(n+1)/(2n-1)*(4/5^(2n-1)-1/239^(2n-1)),n=1 to 20, joka laski

3.141592653589793238462643383271236577919312610350012125021

n=1 to ∞

WA antoi 16*atan(1/5)-4*atan(1/239)

Keckuli
Seuraa 
Viestejä768

PPo kirjoitti:
PPo kirjoitti:
Annoin WA:lle

∑4*(-1)^(n+1)/(2n-1)*(4/5^(2n-1)-1/239^(2n-1)),n=1 to 20, joka laski

3.141592653589793238462643383271236577919312610350012125021

 n=1 to 10

3.141592653589791696917279619620105448140651982932603963889

Joo, kyllä varmasti sijoituslauseke on oikein - se toinenkin - mutta koodini antaa silti tulokseksi nollan. Jokin ihan simppeli ja sanoisinko alkeellinen moka koodissani on. Täytyy vaikka ensi yönä yrittää saada koodi toimimaan. 

Bernard Shawn: ”Tiede on aina väärässä: se ei koskaan ratkaise ongelmaa luomatta kymmentä lisää.”

Sivut

Suosituimmat

Uusimmat

Sisältö jatkuu mainoksen alla

Suosituimmat