Einführung
Ich fand diese Frage geschlossen, weil sie unklar war, aber es war eine schöne Idee. Ich werde mein Bestes geben, um daraus eine klare Herausforderung zu machen.
Die Riemann-Zeta-Funktion ist eine spezielle Funktion, die als analytische Fortsetzung von definiert ist
zur komplexen Ebene. Es gibt viele äquivalente Formeln dafür, was es für Code-Golf interessant macht.
Herausforderung
Schreiben Sie ein Programm, das 2 Gleitkommazahlen als Eingabe verwendet (Real- und Imaginärteil einer komplexen Zahl) und die Riemann-Zeta-Funktion an diesem Punkt auswertet.
Regeln
- Eingabe und Ausgabe über die Konsole ODER Funktion Eingabe- und Rückgabewert
- Eingebaute komplexe Zahlen sind nicht erlaubt, verwenden Sie Floats (Zahl, Doppel, ...)
- Keine mathematischen Funktionen außer
+ - * / pow log
und realwertigen Triggerfunktionen (wenn Sie integrieren möchten, verwenden Sie die Gammafunktion, ... Sie müssen diese Funktionsdefinition in den Code aufnehmen) - Eingabe: 2 Floats
- Ausgang: 2 Floats
- Ihr Code muss einen Wert enthalten, der theoretisch beliebige Genauigkeit bietet, wenn er beliebig groß / klein gemacht wird
- Das Verhalten an Eingang 1 ist nicht wichtig (dies ist der einzige Pol dieser Funktion)
Der kürzeste Code in Bytes gewinnt!
Beispiel für Ein- und Ausgabe
Eingang:
2, 0
Ausgabe:
1.6449340668482266, 0
Eingang:
1, 1
Ausgabe:
0,5821580597520037, -0,9268485643308071
Eingang:
-1, 0
Ausgabe:
-0,08333333333333559, 0
code-golf
math
complex-numbers
calculus
Jens rendert
quelle
quelle
eps
und Eingabex
existiert ein ,N
welche berechnetzeta(x)
innerhalbeps
; oder muss es eine geben,N
die nur davon abhängteps
und garantiert, dass sie für einex
(oder vielleicht fürx
mehr als eine gegebene Funktioneps
von der Stange) die Grenze erreicht; oder kann davonN
abhängenx
, aber Antworten sollten erklären, wieN
gegeben gegebenx
undeps
? (Meine analytische Zahlentheorie ist nicht viel, aber ich vermute, dass die Optionen 2 und 3 über alle bis auf ein oder zwei reguläre Poster hinausgehen werden).x
und für jedeneps
muss einP
solcher existieren , dass für alleN>P
die Ausgabe näher ist alseps
der genaue Wert. Ist das klar? Muss ich es für den Fall mit N klären, das klein genug ist?Antworten:
Python - 385
Dies ist eine einfache Implementierung von Gleichung 21 von http://mathworld.wolfram.com/RiemannZetaFunction.html. Dabei wird die Python-Konvention für optionale Argumente verwendet. Wenn Sie eine Genauigkeit angeben möchten, können Sie der Funktion ein drittes Argument übergeben, andernfalls wird standardmäßig 1e-24 verwendet.
quelle
z(2,0)
gibt einen falschen Wert an, sollte pi ^ 2/6 sein.Python 3 ,
303297 BytesDiese Antwort basiert auf der Python-Antwort von RT mit mehreren Änderungen:
Binomial(n, k)
wird definiert alsp = p * (n-k) / (k+1)
die VeränderungenBinomial(n,k)
anBinomial(n,k+1)
mit jedem Durchlauf der Schleife für.(-1)**k * Binomial(n,k)
wurde,p = p * (k-n) / (k+1)
was das Vorzeichen bei jedem Schritt der for-Schleife umdreht.while
Schleife geändert, um sofort zu überprüfen, oba*a + b*b < E
.~
wird an mehreren Stellen eingesetzt , wo sie in Golf helfen würden, mit Identitäten wie-n-1 == ~n
,n+1 == -~n
undn-1 == ~-n
.Einige andere kleine Modifikationen wurden vorgenommen, um das Golfen zu verbessern, z. B. das Einfügen der
for
Schleife in eine Zeile und das Aufrufenprint
einer Zeile mit dem Code davor.Golfvorschläge willkommen. Probieren Sie es online aus!
Bearbeiten: -6 Bytes aus einer Reihe kleiner Änderungen.
quelle
Axiom,
413 315292 BytesDies würde auch die Gleichung 21 von http://mathworld.wolfram.com/RiemannZetaFunction.html implementieren. Das Obige sollte die hier interpretierte Axiomfunktion z (a, b) sein, die hier 16x langsamer ist als diese unter der Funktion Zeta (a, b) [ das sollte derjenige sein, der zusammengestellt wurde] alles ungolfed und kommentiert [1 Sekunde für Zeta () gegenüber 16 Sekunden für z () für einen Wert von 20 Stellen nach dem Gleitkomma]. Für die Ziffernfrage würde man die Genauigkeit wählen, indem man Ziffern () aufruft; Funktion, zum Beispiel Ziffern (10); z (1,1) sollte 10 Ziffern nach dem Punkt drucken, aber Ziffern (50); z (1,1) sollten 50 Ziffern nach dem Punkt drucken.
quelle