Wprowadzenie
Znalazłem to pytanie, które zostało zamknięte, ponieważ było niejasne, ale był to fajny pomysł. Zrobię co w mojej mocy, aby było to wyraźne wyzwanie.
Funkcja Riemanna Zeta jest funkcją specjalną, która jest zdefiniowana jako kontynuacja analityczna
do złożonej płaszczyzny. Istnieje wiele równoważnych formuł, które sprawiają, że jest to interesujące dla golfa kodowego.
Wyzwanie
Napisz program, który pobiera 2 zmiennoprzecinkowe dane wejściowe (rzeczywistą i urojoną część liczby zespolonej) i ocenia funkcję Riemanna Zety w tym punkcie.
Zasady
- Wejście i wyjście za pośrednictwem wejścia LUB wartości funkcji konsoli lub powrotu
- Wbudowane liczby zespolone są niedozwolone, użyj liczb zmiennoprzecinkowych (liczba, liczba podwójna, ...)
- Żadnych funkcji matematycznych oprócz funkcji
+ - * / pow log
wyzwalających o wartościach rzeczywistych (jeśli chcesz zintegrować, użyj funkcji gamma, ... musisz zawrzeć tę definicję funkcji w kodzie) - Wejście: 2 pływaki
- Wyjście: 2 pływaki
- Twój kod musi zawierać wartość, która daje teoretycznie dowolną precyzję, gdy zostanie wykonana dowolnie duża / mała
- Zachowanie na wejściu 1 nie jest ważne (jest to jedyny biegun tej funkcji)
Najkrótszy kod w bajtach wygrywa!
Przykład wejścia i wyjścia
Wejście:
2, 0
Wynik:
1.6449340668482266, 0
Wejście:
1, 1
Wynik:
0,5821580597520037, -0,9268485643308071
Wejście:
-1, 0
Wynik:
-0,08333333333333559, 0
code-golf
math
complex-numbers
calculus
Jens Renders
źródło
źródło
eps
i danych wejściowychx
istnieje coś,N
co oblicza sięzeta(x)
do wewnątrzeps
; lub musi istnieć coś,N
co zależy tylkoeps
i gwarantuje, że dla dowolnejx
(lub być może dla dowolnejx
więcej niż danej funkcjieps
bieguna) osiągnie granicę; lub możeN
zależećx
, ale odpowiedzi powinny wyjaśniać, jak obliczyćN
podanex
ieps
? (Moja teoria liczb analitycznych nie jest zbyt duża, ale podejrzewam, że opcje 2 i 3 będą poza wszystkim oprócz jednego lub dwóch zwykłych plakatów).x
i dla każdegoeps
musi istniećP
taki, że dla wszystkichN>P
danych wyjściowych jest bliżej niżeps
do dokładnej wartości. Czy to jasne? Czy muszę to wyjaśnić w przypadku wystarczająco małych liter N?Odpowiedzi:
Python - 385
Jest to prosta implementacja równania 21 z http://mathworld.wolfram.com/RiemannZetaFunction.html Wykorzystuje konwencję Pythona do opcjonalnych argumentów; jeśli chcesz określić precyzję, możesz przekazać trzeci argument do funkcji, w przeciwnym razie domyślnie używa 1e-24.
źródło
z(2,0)
daje niepoprawną wartość, powinna być pi ^ 2/6.Python 3 ,
303297 bajtówTa odpowiedź jest oparta na odpowiedzi RT na Python z kilkoma modyfikacjami:
Binomial(n, k)
jest definiowany jako,p = p * (n-k) / (k+1)
który zmieniaBinomial(n,k)
sięBinomial(n,k+1)
przy każdym przejściu pętli for.(-1)**k * Binomial(n,k)
stał się,p = p * (k-n) / (k+1)
co zmienia znak na każdym kroku pętli for.while
pętlę, aby natychmiast sprawdzić, czya*a + b*b < E
.~
jest używany w kilku miejscach, gdzie będą pomagać w golfa, używając tożsamości, takie jak-n-1 == ~n
,n+1 == -~n
in-1 == ~-n
.Wprowadzono kilka innych małych modyfikacji dla lepszego gry w golfa, takich jak umieszczenie
for
pętli na jednej linii i wywołanieprint
na jednej linii z kodem przed nią.Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Edycja: -6 bajtów z szeregu małych zmian.
źródło
Axiom,
413 315292 bajtówZaimplementowałoby to również równanie 21 z http://mathworld.wolfram.com/RiemannZetaFunction.html Powyżej powinna być tutaj jedna z interpretowanych funkcji Axiom z (a, b) tutaj 16x wolniej niż ta poniżej funkcji Zeta (a, b) [ to powinna być ta skompilowana] wszyscy nieposortowani i skomentowali [1 sekunda dla Zeta () wobec 16 sekund dla z () dla jednej wartości 20 cyfr po punkcie zmiennoprzecinkowym]. W przypadku pytania o cyfrę należałoby wybrać dokładność, wywołując cyfry (); funkcja, na przykład cyfry (10); z (1,1) powinien wypisać 10 cyfr po punkcie, ale cyfry (50); z (1,1) powinien wypisać 50 cyfr po punkcie.
źródło