Mitä erikoista on luvussa 999999?
Lähetetty: 13 Joulu 2022, 01:01
Se on piin tuhannen ensimmäisen desimaalin joukossa pisin lukujono, mikä sisältää samoja numeroita. Ne ovat desimaalit väliltä 764-769.
Olen tutkimuksissani ja kokeiluissani päätynyt siihen, että jos halutaan n kpl piin desimaaleja oikein, niin laskut on suoritettava tarkkuudella 2*n ja John Machin sarjasta on otettava 2*n termiä. Ainakin tämä päti tuhanteen saakka. Pienemmilläkin arvoilla pärjännee, mutta laskin nyt näillä. En osaa sanoa päteekö sääntö suurempiinkin arvoihin.
Alla ohjelma, jolla laskin tuhat piin desimaalia ja suoritin tutkimuksen. Ajo kesti 64.667 sekuntia.
Suosittelen BigDecimal kirjaston asentamista niille, jotka haluavat leikkiä Pascalilla ja isoilla numeroilla
Yleensä ainakin minulle kaikenmaailman kirjastojen asentaminen tuottaa ongelmia, mutta nyt riittää kunhan tiedosto bigdecimalmath.pas sijaistee samassa hakemistossa kuin sinun ohjelmasi. Kirjaston saa tuolta: https://www.benibela.de/sources_en.html#bigdecimalmath ja freepascalin tuolta: https://www.freepascal.org/ Sen kun on asentanut, niin komentoriviltä ohjelmat kääntyvät käskyllä fpc ohjelma.pas
Yritin laskea ensin kymmenentuhatta desimaalia, mutta kärsivällisyys loppui kesken. Tein kuvaajan: piin desimaalien laskemisen aikavaatimuksille 1:stä viiteensataan tarkkuudella tuolla minun ohjelmallani ja se nousee kyllä jyrkästi, mutta silti en ymmärä miksei edes tuntikausien ajo riittänyt kymmenelletuhannelle desimaalille, kun tuhat laskettiin minuutissa. Ymmärtääkö joku toinen? Täytyy ehkä yrittää vielä laittaa pariksi vuorokaudeksi ohjelma pyörimään. Netistä löytyisi kyllä vaikka miljoona piin desimaalia: https://www.piday.org/million/ , mutta haluaisin laskea ne itse.
Olen tutkimuksissani ja kokeiluissani päätynyt siihen, että jos halutaan n kpl piin desimaaleja oikein, niin laskut on suoritettava tarkkuudella 2*n ja John Machin sarjasta on otettava 2*n termiä. Ainakin tämä päti tuhanteen saakka. Pienemmilläkin arvoilla pärjännee, mutta laskin nyt näillä. En osaa sanoa päteekö sääntö suurempiinkin arvoihin.
Alla ohjelma, jolla laskin tuhat piin desimaalia ja suoritin tutkimuksen. Ajo kesti 64.667 sekuntia.
Koodi: Valitse kaikki
program TuhatPii;
uses bigdecimalmath, sysutils,DateUtils;
const tarkkuus = 1000;
tarkkuuskerroin = 2;
type strindeksi = 1..tarkkuus;
var pii, piiapuri1, piiapuri2,viisi,numero239,nelja,yksi,ind,kaksi,jakaja: BigDecimal;
str: array [1..tarkkuus] of char;
merkki,lkm,i : strindeksi;
aika1,aika2:Double;
kokeile : char;
pisin : word;
function potenssi(a,n: BigDecimal):BigDecimal; // laskee a potenssii n:n
var tulos,i: BigDecimal;
begin
tulos:=1;
i:=1;
while i<=n do begin
tulos:=tulos*a;
i:=i+1;
end;
potenssi:=tulos;
end;
begin
aika1:=Now;
pii:= 0;
ind:= 1;
piiapuri1:=0;
piiapuri2:=0;
viisi:=5;
numero239:=239;
nelja:=4;
yksi:=1;
kaksi:=2;
while ind <= (tarkkuus*2) do
begin
jakaja:=ind*(potenssi(viisi,ind));
piiapuri1:= piiapuri1+(divide(nelja, jakaja,tarkkuuskerroin*tarkkuus));
jakaja:=(ind*(potenssi(numero239,ind)));
piiapuri2:= piiapuri2-(divide(yksi, jakaja,tarkkuuskerroin*tarkkuus));
ind:=ind+kaksi;
jakaja:=(ind*(potenssi(viisi,ind)));
piiapuri1:=piiapuri1-(divide(nelja, jakaja,tarkkuuskerroin*tarkkuus));
jakaja:=(ind*(potenssi(numero239,ind)));
piiapuri2:=piiapuri2+(divide(yksi, jakaja,tarkkuuskerroin*tarkkuus));
pii:=nelja*(piiapuri1+piiapuri2);
ind:=ind+kaksi;
end;
aika2:=Now;
Writeln((aika2-aika1)*86400,' sekuntia.');
str:=BigDecimalToStr(pii);
writeln(str);
pisin:=1;
merkki:=1;
while merkki<tarkkuus do
begin
lkm:=0;
kokeile:=str[merkki];
while (kokeile=str[merkki]) and (merkki <= tarkkuus) do
begin
lkm:=lkm+1;
merkki:=merkki+1;
end;
if lkm>=pisin then
begin
pisin:=lkm;
writeln(merkki-lkm,'-',merkki-1);
for i:=(merkki-lkm) to (merkki-1) do write(str[i]);
writeln();
end;
end;
end.Yritin laskea ensin kymmenentuhatta desimaalia, mutta kärsivällisyys loppui kesken. Tein kuvaajan: piin desimaalien laskemisen aikavaatimuksille 1:stä viiteensataan tarkkuudella tuolla minun ohjelmallani ja se nousee kyllä jyrkästi, mutta silti en ymmärä miksei edes tuntikausien ajo riittänyt kymmenelletuhannelle desimaalille, kun tuhat laskettiin minuutissa. Ymmärtääkö joku toinen? Täytyy ehkä yrittää vielä laittaa pariksi vuorokaudeksi ohjelma pyörimään. Netistä löytyisi kyllä vaikka miljoona piin desimaalia: https://www.piday.org/million/ , mutta haluaisin laskea ne itse.