Вступление
Я нашел этот вопрос закрытым, потому что он был неясен, но это была хорошая идея. Я сделаю все возможное, чтобы превратить это в явный вызов.
Функция Римана Зета является специальной функцией , которая определяется как аналитическое продолжение
в сложную плоскость. Есть много эквивалентных формул для этого, что делает его интересным для игры в гольф.
Вызов
Напишите программу, которая принимает в качестве входных данных 2 числа с плавающей запятой (действительную и мнимую часть комплексного числа) и оценивает дзета-функцию Римана в этой точке.
правила
- Ввод и вывод через консоль ИЛИ функция ввода и возврата значения
- Встроенные комплексные числа не допускаются, используйте числа с плавающей точкой (число, двойные, ...)
- Никаких математических функций, кроме функций с
+ - * / pow log
реальными значениями триггеров (если вы хотите интегрировать, используйте гамма-функцию, ... вы должны включить это определение функций в код) - Ввод: 2 поплавка
- Выход: 2 поплавка
- Ваш код должен содержать значение, которое дает теоретически произвольную точность, когда сделано произвольно большим / маленьким
- Поведение на входе 1 не важно (это единственный полюс этой функции)
Самый короткий код в байтах побеждает!
Пример ввода и вывода
Входные данные:
2, 0
Выход:
1.6449340668482266, 0
Входные данные:
1, 1
Выход:
0,5821580597520037, -0,9268485643308071
Входные данные:
-1, 0
Выход:
-0.08333333333333559, 0
code-golf
math
complex-numbers
calculus
Йенс Рендерс
источник
источник
eps
и вводаx
существуетN
вычислениеzeta(x)
с точностью доeps
; или должен существовать тот,N
который зависит только отeps
и гарантирует, что для любогоx
(или, возможно, для любой,x
более определенной функцииeps
от полюса) он достигает границы; или можетN
зависетьx
, но ответы должны объяснить, как рассчитатьN
данныеx
иeps
? (Моя аналитическая теория чисел не так уж много, но я подозреваю, что варианты 2 и 3 будут выходить за рамки всех, кроме одного или двух обычных плакатов).x
и для любогоeps
должно существоватьP
такое, что для всехN>P
выходных данных ближе, чемeps
к точному значению. Это понятно? Нужно ли уточнить это для случая, когда N достаточно мало?Ответы:
Python - 385
Это простая реализация уравнения 21 от http://mathworld.wolfram.com/RiemannZetaFunction.html. Это использует соглашение Python для необязательных аргументов; если вы хотите указать точность, вы можете передать третий аргумент функции, в противном случае она использует 1e-24 по умолчанию.
источник
z(2,0)
дает неверное значение, должно быть пи ^ 2/6.Python 3 ,
303297 байтЭтот ответ основан на ответе Python RT с несколькими модификациями:
Binomial(n, k)
определяется как ,p = p * (n-k) / (k+1)
который изменяется ,Binomial(n,k)
чтобыBinomial(n,k+1)
при каждом проходе для цикла.(-1)**k * Binomial(n,k)
сталp = p * (k-n) / (k+1)
щелчок знака на каждом шагу цикла.while
цикл был изменен, чтобы немедленно проверить, еслиa*a + b*b < E
.~
используется в нескольких местах , где они будут помогать в гольф, используя тождества , такие как-n-1 == ~n
,n+1 == -~n
, иn-1 == ~-n
.Для улучшения игры в гольф было сделано несколько других небольших модификаций, таких как размещение
for
цикла в одной строке и вызов вprint
одной строке с кодом перед ним.Предложения по игре в гольф приветствуются. Попробуйте онлайн!
Редактировать: -6 байт из числа небольших изменений.
источник
Аксиома,
413 315292 байтаЭто также реализовало бы уравнение 21 из http://mathworld.wolfram.com/RiemannZetaFunction.html Выше приведенная здесь должна быть одна аксиомная функция z (a, b), которая в 16 раз медленнее, чем эта функция Zeta (a, b) ниже [ это должен быть тот, который был скомпилирован] все безголосие и прокомментировано [1 секунда для Zeta () против 16 секунд для z () для одного значения из 20 цифр после точки плавания]. Для вопроса о цифре можно выбрать точность, вызвав digits (); функция, например, цифры (10); z (1,1) должен печатать 10 цифр после точки, но цифры (50); z (1,1) должен печатать 50 цифр после точки.
источник