Introducción
Encontré esta pregunta que estaba cerrada porque no estaba clara, pero fue una buena idea. Haré todo lo posible para convertir esto en un desafío claro.
La función Riemann Zeta es una función especial que se define como la continuación analítica de
al plano complejo Hay muchas fórmulas equivalentes que lo hacen interesante para el golf de código.
Desafío
Escriba un programa que tome 2 flotantes como entrada (la parte real e imaginaria de un número complejo) y evalúe la función Riemann Zeta en ese punto.
Reglas
- Entrada y salida a través de la consola O función de entrada y valor de retorno
- Los números complejos integrados no están permitidos, use flotadores (número, doble, ...)
- Sin funciones matemáticas, excepto funciones
+ - * / pow log
trigonométricas reales (si desea integrar, use la función gamma, ... debe incluir esta definición de funciones en el código) - Entrada: 2 flotadores
- Salida: 2 flotadores
- Su código debe contener un valor que proporcione una precisión teóricamente arbitraria cuando se hace arbitrario grande / pequeño
- El comportamiento en la entrada 1 no es importante (este es el único polo de esta función)
¡El código más corto en bytes gana!
Ejemplo de entrada y salida
Entrada:
2, 0
Salida:
1.6449340668482266, 0
Entrada:
1, 1
Salida:
0.5821580597520037, -0.9268485643308071
Entrada:
-1, 0
Salida:
-0.08333333333333559, 0
code-golf
math
complex-numbers
calculus
Jens Renders
fuente
fuente
eps
e entradax
exista unN
que se calculezeta(x)
dentroeps
; o debe existir unaN
que dependa soloeps
y garantice que para cualquierx
(o tal vez para algox
más que una función dadaeps
desde el polo) logre el límite; o puedeN
depender dex
, pero las respuestas deben explicar cómo calcularN
dadox
yeps
? (Mi teoría analítica de números no es demasiado, pero sospecho que las opciones 2 y 3 van a estar más allá de todos menos uno o dos pósters regulares).x
y para cualquieraeps
debe existir unP
tal que para todaN>P
la salida esté más cerca queeps
el valor exacto. ¿Está esto claro? ¿Necesito aclararlo para el caso con N lo suficientemente pequeño?Respuestas:
Python - 385
Esta es una implementación sencilla de la Ecuación 21 de http://mathworld.wolfram.com/RiemannZetaFunction.html. Utiliza la convención de Python para argumentos opcionales; si desea especificar una precisión, puede pasar un tercer argumento a la función; de lo contrario, utiliza 1e-24 de forma predeterminada.
fuente
z(2,0)
da un valor incorrecto, debe ser pi ^ 2/6.Python 3 ,
303297 bytesEsta respuesta se basa en la respuesta de Python de RT con varias modificaciones:
Binomial(n, k)
se define comop = p * (n-k) / (k+1)
que cambiaBinomial(n,k)
aBinomial(n,k+1)
con cada pasada del bucle.(-1)**k * Binomial(n,k)
convirtió en lop = p * (k-n) / (k+1)
que voltea el signo en cada paso del ciclo for.while
bucle ha sido cambiado para verificar inmediatamente sia*a + b*b < E
.~
se utiliza en varios lugares en los que ayudarían a jugar al golf, usando identidades tales como-n-1 == ~n
,n+1 == -~n
, yn-1 == ~-n
.Se hicieron varias otras modificaciones pequeñas para mejorar el golf, como colocar el
for
bucle en una línea y la llamadaprint
en una línea con el código anterior.Sugerencias de golf bienvenidas. Pruébalo en línea!
Editar: -6 bytes de una serie de pequeños cambios.
fuente
Axiom,
413 315292 bytesEsto también implementaría la ecuación 21 de http://mathworld.wolfram.com/RiemannZetaFunction.html. Lo anterior debería ser el que interpretó la función Axioma z (a, b) aquí 16 veces más lenta que la siguiente función Zeta (a, b) [ ese debería ser el que se compiló] todos sin golf y comentados [1 segundo para Zeta () contra 16 segundos para z () para un valor de 20 dígitos después del punto flotante]. Para la pregunta de dígitos, uno elegiría la precisión llamando a dígitos (); función, por ejemplo dígitos (10); z (1,1) debe imprimir 10 dígitos después del punto, pero dígitos (50); z (1,1) debe imprimir 50 dígitos después del punto.
fuente