introduction
J'ai trouvé cette question qui était fermée parce qu'elle n'était pas claire, mais c'était une bonne idée. Je ferai de mon mieux pour en faire un défi clair.
La fonction Riemann Zeta est une fonction spéciale qui est définie comme la continuation analytique de
au plan complexe. Il existe de nombreuses formules équivalentes pour cela, ce qui le rend intéressant pour le golf de code.
Défi
Écrivez un programme qui prend 2 flottants en entrée (la partie réelle et imaginaire d'un nombre complexe) et évalue la fonction Riemann Zeta à ce point.
Règles
- Entrée et sortie via console OU fonction entrée et valeur de retour
- Les nombres complexes construits ne sont pas autorisés, utilisez des flotteurs (nombre, double, ...)
- Pas de fonctions mathématiques sauf
+ - * / pow log
et des fonctions trigonométriques réelles (si vous souhaitez intégrer, utilisez la fonction gamma, ... vous devez inclure cette définition de fonctions dans le code) - Entrée: 2 flotteurs
- Sortie: 2 flotteurs
- Votre code doit contenir une valeur qui donne une précision théoriquement arbitraire lorsqu'elle est rendue arbitraire grande / petite
- Le comportement à l'entrée 1 n'est pas important (c'est le seul pôle de cette fonction)
Le code le plus court en octets gagne!
Exemple d'entrée et de sortie
Contribution:
2, 0
Production:
1,6449340668482266, 0
Contribution:
1, 1
Production:
0,5821580597520037, -0,9268485643308071
Contribution:
-dix
Production:
-0,08333333333333559, 0
code-golf
math
complex-numbers
calculus
Jens Renders
la source
la source
eps
et entréex
existe unN
qui calculezeta(x)
à l'intérieureps
; ou doit-il exister unN
qui ne dépend que deeps
et garantit que pour toutx
(ou peut-être pourx
plus qu'une fonction donnéeeps
du pôle) il atteint la limite; ou peutN
dépendrex
, mais les réponses devraient expliquer comment calculerN
donnéx
eteps
? (Ma théorie analytique des nombres n'est pas à la hauteur, mais je soupçonne que les options 2 et 3 vont dépasser toutes les affiches ordinaires sauf une ou deux).x
et pour tout,eps
il doit exister unP
tel que pour touteN>P
la sortie soit plus proche queeps
la valeur exacte. Est-ce clair? Dois-je le clarifier pour le cas avec N assez petit?Réponses:
Python - 385
Il s'agit d'une implémentation simple de l'équation 21 de http://mathworld.wolfram.com/RiemannZetaFunction.html Elle utilise la convention de Python pour les arguments facultatifs; si vous souhaitez spécifier une précision, vous pouvez passer un troisième argument à la fonction, sinon elle utilise 1e-24 par défaut.
la source
z(2,0)
donne une valeur incorrecte, devrait être pi ^ 2/6.Python 3 ,
303297 octetsCette réponse est basée sur la réponse Python de RT avec plusieurs modifications:
Binomial(n, k)
est défini comme celuip = p * (n-k) / (k+1)
qui changeBinomial(n,k)
àBinomial(n,k+1)
chaque passage de la boucle for.(-1)**k * Binomial(n,k)
est devenup = p * (k-n) / (k+1)
ce qui inverse le signe à chaque étape de la boucle for.while
boucle a été modifiée pour vérifier immédiatement sia*a + b*b < E
.~
est utilisé dans plusieurs endroits où ils contribueraient à jouer au golf, en utilisant des identités telles que-n-1 == ~n
,n+1 == -~n
etn-1 == ~-n
.Plusieurs autres petites modifications ont été apportées pour un meilleur golf, comme mettre la
for
boucle sur une ligne et l'appelprint
sur une ligne avec le code avant.Suggestions de golf bienvenues. Essayez-le en ligne!
Edit: -6 octets à partir d'un certain nombre de petits changements.
la source
Axiom,
413 315292 octetsCela implémenterait également l'équation 21 de http://mathworld.wolfram.com/RiemannZetaFunction.html Ce qui précède devrait être la fonction Axiom z (a, b) ici répétée 16 fois plus lentement que cette fonction ci-dessous Zeta (a, b) [ ce devrait être celui compilé] tout non golfé et commenté [1 seconde pour Zeta () contre 16 secondes pour z () pour une valeur de 20 chiffres après le point flottant]. Pour la question des chiffres, on choisirait la précision en appelant digits (); , par exemple les chiffres (10); z (1,1) devrait imprimer 10 chiffres après le point, mais les chiffres (50); z (1,1) devrait imprimer 50 chiffres après le point.
la source