Wyzwanie
Musisz obliczyć pi w najkrótszej możliwej długości. Możesz dołączyć do dowolnego języka i możesz użyć dowolnej formuły do obliczenia liczby pi. Musi być w stanie obliczyć liczbę pi z co najmniej 5 miejscami po przecinku. Najkrótszy, mierzony byłby w postaciach. Konkurs trwa 48 godzin. Zaczynać.
Uwaga : To podobne pytanie stwierdza, że PI musi być obliczone przy użyciu serii 4 * (1 - 1/3 + 1/5 - 1/7 +…). To pytanie nie ma tego ograniczenia, a w rzeczywistości wiele odpowiedzi tutaj (w tym najbardziej prawdopodobne, że wygra) byłoby nieważnych w tym drugim pytaniu. To nie jest duplikat.
code-golf
pi
approximation
poseidon
źródło
źródło
Odpowiedzi:
Python3, 7
Działa w interaktywnej powłoce
Wynik:
3.1415929203539825
popraw do 6 miejsc po przecinkuI wreszcie mam rozwiązanie, które bije APL!
Och, a jeśli się zastanawiasz, ten stosunek nazywa się the 率 (dosłownie „dokładny stosunek”) i jest proponowany przez chińskiego matematyka Zu Chongzhi (429-500 ne). Powiązany artykuł na Wikipedii można znaleźć tutaj . Zu podał również stosunek 22/7 jako „przybliżony stosunek” i jest znany jako pierwszy matematyk, który zaproponował, że 3,1415926 <= pi <= 3,1415927
źródło
355/113
. Najniższa głosowało odpowiedź:3+.14159
. Naprawdę nie widzę dużej różnicy.PHP -
132127125124 bajtyPodstawowa symulacja Monte-Carlo. Co 10 mln iteracji drukuje bieżący stan:
Dzięki cloudfeet i zamnuts za sugestie!
Przykładowe dane wyjściowe:
źródło
$j+=$x*$x+$y*$y<=1;
co pozwoliłoby ci zaoszczędzić cztery bajty.$k+=1/4;
iprint $j/$k
może być zredukowany do$k++;
iprint 4*$j/$k
na inny bajt.J 6
Objaśnienie:
*.
podaje długość i kąt liczby zespolonej. Kąt -1 wynosi pi.{:
bierze ogon listy [długość, kąt]Tylko dla powoli zbieżnych fetyszystów serii, dla 21 bajtów, seria Leibniza:
źródło
atan(0) + pi
. Nie sądzę, że użycie funkcji trygonometrycznych i samego pi powinno się liczyć jako „obliczenie”.Arg
(czyli argument liczby zespolonej) nie jest funkcją trygonometryczną, mimo że ma wartości podobne doatan(0) + pi
.Perl, 42 bajty
Oblicza π za pomocą wzoru Leibniza :
999999 jest używane jako największa n, aby uzyskać dokładność pięciu cyfr dziesiętnych.
Wynik:
3.14159165358977
źródło
Piet, wiele kodów
Nie moja odpowiedź, ale to najlepsze rozwiązanie tego problemu, jakie widziałem:
Rozumiem, że sumuje piksele w okręgu i dzieli przez promień, a następnie jeszcze raz. To jest:
Moim zdaniem lepszym podejściem jest program, który generuje ten obraz w dowolnym rozmiarze, a następnie uruchamia go przez interpretera Piet.
Źródło: http://www.dangermouse.net/esoteric/piet/samples.html
źródło
TECHNICZNIE OBLICZAMY, 9
TECHNICZNIE JESZCZE OBLICZAMY, 10
OBLICZAMY TAK TWARDO, 8
I PRZYPADKOWO PI, 12
I technicznie ta odpowiedź śmierdzi.
źródło
APL - 6
Wyjścia
3.141592654
. Oblicza dwa razy wartość arcus sinus 1.13-znakowym rozwiązaniem byłoby:
To wychodzi
3.141591654
dla mnie, co pasuje do żądanej precyzji.Do
+ 4/1 - 4/3 + 4/5 - 4/7 ...
obliczeń wykorzystuje jednak proste serie.źródło
¯2○¯1
?” (Tj. Acos -1). Ale to daje złożone przybliżenie repl.it (3.1415926425236J¯1.1066193467303274e¯8
). Wiesz, dlaczego? Czy wszystkie implementacje to robią?2 * asin(1)
jest trochę oszustwem.sqrt(1-theta^2)
(który pojawia się w wielu tożsamościach trig) w pewnym momencie i gdzieś stracił trochę precyzji, co ostatecznie zakończyło się nieco negatywnie1-theta^2
.acos -0.75
. Nie ma mowy, aby można było obliczyć,1 - 0.75 ^ 2
że jest ujemny.J - 5 bajtów
To oznacza
|log(-1)|
.źródło
ln(e^(42*pi))/42
lubpi*113/113
.Kalkulator Google, 48
Bierze kij masła, wykonuje zaawansowane obliczenia, robi z niego pi. Pomyślałem, że skoro wszyscy robią proste odpowiedzi matematyczne, dodam nieco bardziej unikalną.
Przykład
źródło
stick of butter
jest słodkie i zabawne, ale w gruncie rzeczy jest to kolejnapi*x/x+y-y
algebraiczna tożsamość.Oktawa, 31
Oblicza powierzchnię jednej czwartej okręgu o promieniu 2 poprzez całkowanie numeryczne.
źródło
Matematyka 6
źródło
Python, 88
Rozwiązanie :
Przykładowe dane wyjściowe w powłoce Pythona:
Udaje się uniknąć importu. Można go łatwo zamienić na bibliotekę dziesiętną o dowolnej precyzji; wystarczy wymienić
3.
zDecimal('3')
ustaw precyzję przed i po, to jednoskładnikowa plus wynik precyzji konwersji.I w przeciwieństwie do całej partii tutaj odpowiedzi, rzeczywiście oblicza π zamiast opierania się na wbudowanym w stałych lub matematyki oszustwo, to znaczy
math.acos(-1)
,math.radians(180)
itpźródło
język asemblera x86 (5 znaków)
Whether this loads a constant from ROM or actually calculates the answer depends on the processor though (but on at least some, it actually does a calculation, not just loading the number from ROM). To put things in perspective, it's listed as taking 40 clock cycles on a 387, which is rather more than seems to make sense if it were just loading the value from ROM.
If you really want to ensure a calculation you could do something like:
[for 27 characters]
źródło
fldpi
to zrobiły?asin(-1)
norfldpi
are particularly interesting or creative. There's not much purpose in competing to see whose favorite language has the shortest name for predefined trig functions and pi constants.bc -l, 37 bytes
Nie widzę żadnych innych odpowiedzi za pomocą produktu Wallis , więc ponieważ nazwano go na cześć mojego imiennika (mój wykładowca Historii matematyki wyszedł z tego bardzo dobrze), nie mogłem się oprzeć.
Okazuje się, że jest to całkiem niezły algorytm z perspektywy golfa, ale jego tempo konwergencji jest fatalne - zbliża się do 1 miliona iteracji tylko po to, aby uzyskać 5 miejsc po przecinku:
bc -l, 15 bajtów
Alternatywnie możemy użyć Newtona-Raphsona do rozwiązania
sin(x)=0
, z początkowym przybliżeniem 3. Ponieważ jest to zbieżne w tak małej liczbie iteracji, po prostu zapisujemy na stałe 2 iteracje, co daje 10 miejsc po przecinku:Iteracyjna formuła według Newtona-Raphsona jest następująca:
sin'
===cos
icos(pi)
===-1
, więc po prostu przybliżamycos
termin, aby uzyskać:Wynik:
źródło
python -
4745pi is actually being calculated without trig functions or constants.
result:
źródło
C, 99
Directly computes area / r^2 of a circle.
This function will calculate pi by counting the number of pixels in a circle of radius
r
then dividing byr*r
(actually it just calculates one quadrant). Withr
as 10000, it is accurate to 5 decimal places (3.1415904800). The parameters to the function are ignored, I just declared them there to save space.źródło
Javascript,
4336x
becomeszeta(2)=pi^2/6
sosqrt(6*x)=pi
. (47 characters)After using the distributive property and deleting the curly brackets from the
for
loop you get:(43 characters)
It returns:
Edit:
I found an even shorter way using the Wallis product:
(36 characters)
It returns:
źródło
Python, Riemann zeta (
5841 char)Or spare two characters, but use scipy
Edit: Saved 16 (!) characters thanks to amcgregor
źródło
math
import andsqrt
call by pivoting to exponentiation instead:(6*sum(n**-2 for n in range(1,9**9)))**0.5
Javascript: 99 characters
Using the formula given by Simon Plouffe in 1996, this works with 6 digits of precision after the decimal point:
This longer variant (130 characters) has a better precision, 15 digits after the decimal point:
I made this based in my two answers to this question.
źródło
Ruby,
545049Online Version for testing.
Another version without creating an array (50 chars):
Online Version for testing.
źródło
a=__import__;reduce(a('operator').__add__,a('itertools').imap(lambda e:(-1.0)**e/(2*e+1)*4,xrange(9**6)))
-- note the use of xrange/imap; in Python 3 you can avoid this; basically I don't want all of your RAM to get consumed constructing a list with so many entries.TI CAS, 35
źródło
Perl - 35 bytes
Produces full floating point precision. A derivation of the formula used can be seen elsewhere.
Sample usage:
Arbitrary Precision Version
Extend as needed. The length of the iteration (e.g.
-329..-1
) should be adjusted to be approximately log2(10) ≈ 3.322 times the number of digits.Or, using
bigint
instead:This runs noticably faster, but doesn't include a decimal point.
źródło
C# 192
Outputs:
No math involved. Just looks up the current version of TeX and does some primitive parsing of the resulting html. Eventually it will become π according to Wikipedia.
źródło
Python 3 Monte Carlo (103 char)
źródło
Game Maker Language, 34
Assumes all uninitialized variables as 0. This is default in some versions of Game Maker.
Result:
źródło
float k(){double x=0,i=0;for(;i++<999999;)x+=6/i/i;return sqrt(x);}
is shorter than this one1e8
instead of 999999for(i=1;i<1e8;)x+=6/i/i++;sqrt(x)
to save a byte (or alternativelyfor(i=1;i++<1e8;)
)?Java -
8355Shorter version thanks to Navin.
Old version:
źródło
180
bypi/180
.R: 33 characters
Hopefully this follows the rules.
źródło
Ruby, 82
Uses some formula I don't really understand and just copied down. :P
Output:
3.1415926535897913
źródło
Ruby, 12
I am technically "calculating"
pian approximation of pi.źródło
acos(-1)
.JavaScript - 19 bytes
Calculates the 9th root of 29809.
źródło