Introdução
Encontrei essa pergunta que foi encerrada porque não estava clara, mas era uma boa ideia. Farei o meu melhor para tornar isso um desafio claro.
A função Riemann Zeta é uma função especial definida como a continuação analítica do
para o plano complexo. Existem muitas fórmulas equivalentes, o que o torna interessante para o código de golfe.
Desafio
Escreva um programa que use 2 carros alegóricos como entrada (a parte real e imaginária de um número complexo) e avalie a função Riemann Zeta nesse ponto.
Regras
- Entrada e saída via console OU função de entrada e valor de retorno
- Números complexos incorporados não são permitidos, use flutuadores (número, duplo, ...)
- Nenhuma função matemática, exceto funções
+ - * / pow log
trigonométricas com valor real (se você deseja integrar, use a função gama, ... você deve incluir esta definição de funções no código) - Entrada: 2 carros alegóricos
- Saída: 2 carros alegóricos
- Seu código deve conter um valor que ofereça precisão teoricamente arbitrária quando convertido em grande / pequeno arbitrário
- O comportamento na entrada 1 não é importante (este é o único pólo desta função)
O menor código em bytes vence!
Exemplo de entrada e saída
Entrada:
2, 0
Resultado:
1.6449340668482266, 0
Entrada:
1, 1
Resultado:
0,5821580597520037, -0,9268485643308071
Entrada:
-1, 0
Resultado:
-0.08333333333333559, 0
code-golf
math
complex-numbers
calculus
Jens Renders
fonte
fonte
eps
e entradax
, exista umN
que calculezeta(x)
para dentroeps
; ou deve existir umN
que dependa apenaseps
e garanta que, para qualquerx
(ou talvez parax
mais do que uma determinada função doeps
pólo) atinja o limite; ou podeN
dependerx
, mas as respostas devem explicar como calcularN
dadosx
eeps
? (Minha teoria dos números analíticos não é muito boa, mas suspeito que as opções 2 e 3 vão além de todos, exceto um ou dois pôsteres regulares).x
e para qualquereps
, deve existir umP
tal que, para todaN>P
a saída, seja mais próximo doeps
que o valor exato. Isso está claro? Preciso esclarecê-lo para o caso com N pequeno o suficiente?Respostas:
Python - 385
Esta é uma implementação direta da Equação 21 em http://mathworld.wolfram.com/RiemannZetaFunction.html Isso usa a convenção do Python para argumentos opcionais; se você deseja especificar uma precisão, pode passar um terceiro argumento para a função, caso contrário, ele usa 1e-24 por padrão.
fonte
z(2,0)
fornece um valor incorreto, deve ser pi ^ 2/6.Python 3 ,
303297 bytesEsta resposta é baseada na resposta Python da RT com várias modificações:
Binomial(n, k)
é definido como op = p * (n-k) / (k+1)
que mudaBinomial(n,k)
paraBinomial(n,k+1)
cada passagem do loop for.(-1)**k * Binomial(n,k)
tornou-sep = p * (k-n) / (k+1)
que vira o sinal a cada passo do loop for.while
loop foi alterado para verificar imediatamente sea*a + b*b < E
.~
é usado em vários lugares onde eles iriam ajudar no golfe, usando identidades tais como-n-1 == ~n
,n+1 == -~n
, en-1 == ~-n
.Várias outras pequenas modificações foram feitas para melhorar o golfe, como colocar o
for
loop em uma linha e a chamadaprint
em uma linha com o código anterior.Sugestões de golfe são bem-vindas. Experimente online!
Editar: -6 bytes de várias pequenas alterações.
fonte
Axiom,
413 315292 bytesIsso também implementaria a equação 21 de http://mathworld.wolfram.com/RiemannZetaFunction.html A descrição acima deve ser a função Axiom repetida z (a, b) aqui 16x mais lenta que esta abaixo da função Zeta (a, b) [ esse deve ser o que foi compilado] todos sem golfe e comentado [1 segundo para Zeta () contra 16 segundos para z () para um valor de 20 dígitos após o ponto de flutuação]. Para a pergunta do dígito, um escolheria a precisão chamando dígitos (); função, por exemplo, dígitos (10); z (1,1) deve imprimir 10 dígitos após o ponto, mas dígitos (50); z (1,1) devem imprimir 50 dígitos após o ponto.
fonte