moon_aka_sun: (Default)
moon_aka_sun ([personal profile] moon_aka_sun) wrote2006-02-28 06:55 pm
Entry tags:

π

Ух ты, а я и не знал! Есть формула для вычисления произвольных знаков пи без вычисления предшествующих знаков! Из неё же, грубо говоря, следует и то, что все цифры в пи случайны и равновероятны.

pi=sum(k=0..INF,1/16^k*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6))

or in Python:

[identity profile] moon-aka-sun.livejournal.com 2006-03-01 12:35 am (UTC)(link)
p = 0.0
for k in range(0,999): # for(k=0;;k+=1)
  a = (4.0/(8*k+1)-2.0/(8*k+4)-1.0/(8*k+5)-1.0/(8*k+6)) / (16**k)
  if a<1e-17: break
  p += a
  print "%2d %.16f" % (k,p)

'''prints:
 0 3.1333333333333333
 1 3.1414224664224664
 2 3.1415873903465816
 3 3.1415924575674357
 4 3.1415926454603365
 5 3.1415926532280878
 6 3.1415926535728809
 7 3.1415926535889729
 8 3.1415926535897523
 9 3.1415926535897913
10 3.1415926535897931
11 3.1415926535897931
'''

join us or die

[identity profile] mtve.livejournal.com 2006-03-01 05:33 pm (UTC)(link)

Как раз сейчас происходит http://www.kernelpanic.pl/perlgolf-view.mx?id=59 (Текущий результат - 117).

Правда твой K и даже J это наверняка побьёт :)

(Кстати, по-моему, строго говоря "случайность и равновероятность" из формулы не следует)

Re: join us or die

[identity profile] moon-aka-sun.livejournal.com 2006-03-01 06:03 pm (UTC)(link)
Строго говоря, нет, конечно. Это я погорячился. :) Просто впечатлило, что k-я шестнадцатеричная цифра числа получаестя почти мгновенно.

За ссылку спасибо, интересно!

Re: join us or die

[identity profile] mtve.livejournal.com 2006-03-01 08:24 pm (UTC)(link)

Гнездо у нас было сначала здесь (http://perlgolf.sourceforge.net/), потом здесь (http://terje2.perlgolf.org), но с тех пор всем уже поднадоело, только вот поляки продолжают :)

Вся информация собрана в этом (http://terje2.frox25.no-ip.org/~golf-info/Book.html) файле.

Re: join us or die

[identity profile] moon-aka-sun.livejournal.com 2006-03-01 08:51 pm (UTC)(link)
На Питоне, не отходя далеко от вышеприведенной формулы и используя встроенные целые неограниченной длины, получается ровно 100 символов, учитывая два перевода строки:
p,m = 0,10**1002
for k in range(829):r=8*k+1;p+=(4*m/r-2*m/(r+3)-m/(r+4)-m/(r+5))/16**k
print p/1000

Re: join us or die

[identity profile] moon-aka-sun.livejournal.com 2006-03-01 08:56 pm (UTC)(link)
Oops! Два пробела в первой строке считать недействительными. Т.е. всего 98.

Re: join us or die

[identity profile] mtve.livejournal.com 2006-03-02 09:09 am (UTC)(link)
В перле нет встроенных длинных целых, а использование модулей считается неспортивным.

Re: join us or die

[identity profile] mtve.livejournal.com 2006-03-02 09:12 am (UTC)(link)
Текущий результат на перле - 101

Re: join us or die

[identity profile] moon-aka-sun.livejournal.com 2006-03-03 07:35 am (UTC)(link)
Что-то не видно на том сайте ни числа 89, ни самих решений.

Re: join us or die

[identity profile] mtve.livejournal.com 2006-03-03 08:23 pm (UTC)(link)
Решения публикуются после окончания игры. Самый крутой человек в этой теме уже довёл свои 89 до 87 (висит на сайте).

J

[identity profile] moon-aka-sun.livejournal.com 2006-03-01 09:48 pm (UTC)(link)
    +/,<.(4 _2 _1 _1*10x^1000)%(1 4 5 6+/8*k)*"1(16x^k=.i.829)
3141592653589793238462643383279502884197169399375105820974944592307816406286208998...

Re: J

[identity profile] moon-aka-sun.livejournal.com 2006-03-02 01:12 am (UTC)(link)
   20 50$":+/,<.-_4 2 1 1*(10x^1003)%(1 4 5 6+/8*k)*"1(16x^k=.i.825)
31415926535897932384626433832795028841971693993751
05820974944592307816406286208998628034825342117067
98214808651328230664709384460955058223172535940812
84811174502841027019385211055596446229489549303819
64428810975665933446128475648233786783165271201909
14564856692346034861045432664821339360726024914127
37245870066063155881748815209209628292540917153643
67892590360011330530548820466521384146951941511609
43305727036575959195309218611738193261179310511854
80744623799627495673518857527248912279381830119491
29833673362440656643086021394946395224737190702179
86094370277053921717629317675238467481846766940513
20005681271452635608277857713427577896091736371787
21468440901224953430146549585371050792279689258923
54201995611212902196086403441815981362977477130996
05187072113499999983729780499510597317328160963185
95024459455346908302642522308253344685035261931188
17101000313783875288658753320838142061717766914730
35982534904287554687311595628638823537875937519577
81857780532171226806613001927876611195909216420198

C 800

[identity profile] moon-aka-sun.livejournal.com 2006-03-02 02:42 am (UTC)(link)
int a=10000,b,c=2800,d,e,f[2801],g;main(){for(;b-c;)f[b++]=a/5;for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);}

[identity profile] potan.livejournal.com 2006-03-30 01:46 pm (UTC)(link)
А разложение в цепную дробь так же хорошо получается?

[identity profile] moon-aka-sun.livejournal.com 2006-03-30 03:54 pm (UTC)(link)
Разложение 1) давно известно, 2) очень медленно сходится. Емнип.

[identity profile] moon-aka-sun.livejournal.com 2006-03-30 04:00 pm (UTC)(link)
Один из перловых вариантов, который и довольно короток, и относительно быст. (Всё может быть скомкано в одну строку.)
@a=(2)x3501;
for(0..999)
{
  $k=@a;
  $C=$k*int(($q=$_=$_.0+$C)/($M=2*--$k+1)),$_%=$k?$M:10for@a;
  chop$q;
  $"=~s!.?[09]*.$!$&.0+$q!e
}
print$"

[identity profile] mtve.livejournal.com 2006-04-02 09:26 am (UTC)(link)
($c,@0)=map P|($c=$c%($d=10+20*$?).0+$?*lc)/$d,@0while$?-=@0[0,1e3]=3;print@0

[identity profile] moon-aka-sun.livejournal.com 2006-04-02 02:06 pm (UTC)(link)
Да, может и коротко, но предыдущий вариант даёт пи за 9 секунд, а этот и за 90 ничего не возрващает.