π

Feb 28, 2006 18:55


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


Read more... )

python, pl, math

Leave a comment

Comments 19

or in Python: moon_aka_sun March 1 2006, 00:35:12 UTC

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

Reply

join us or die mtve March 1 2006, 17:33:00 UTC

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

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

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

Reply

Re: join us or die moon_aka_sun March 1 2006, 18:03:12 UTC
Строго говоря, нет, конечно. Это я погорячился. :) Просто впечатлило, что k-я шестнадцатеричная цифра числа получаестя почти мгновенно.

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

Reply

Re: join us or die mtve March 1 2006, 20:24:15 UTC

Гнездо у нас было сначала здесь, потом здесь, но с тех пор всем уже поднадоело, только вот поляки продолжают :)

Вся информация собрана в этом файле.

Reply


C 800 moon_aka_sun March 2 2006, 02:42:24 UTC
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);}

Reply


potan March 30 2006, 13:46:19 UTC
А разложение в цепную дробь так же хорошо получается?

Reply

moon_aka_sun March 30 2006, 15:54:04 UTC
Разложение 1) давно известно, 2) очень медленно сходится. Емнип.

Reply


moon_aka_sun March 30 2006, 16:00:28 UTC
Один из перловых вариантов, который и довольно короток, и относительно быст. (Всё может быть скомкано в одну строку.)

@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$"

Reply

mtve April 2 2006, 09:26:19 UTC
($c,@0)=map P|($c=$c%($d=10+20*$?).0+$?*lc)/$d,@0while$?-=@0[0,1e3]=3;print@0

Reply

moon_aka_sun April 2 2006, 14:06:06 UTC
Да, может и коротко, но предыдущий вариант даёт пи за 9 секунд, а этот и за 90 ничего не возрващает.

Reply


Leave a comment

Up