Что такое ультрарадикал
Ультрарадикальный , или Доведите радикал, содержащие от вещественного числа определяются как только действительный корень уравнения квинтиков .
Здесь мы используем для обозначения ультрарадикальной функции. Например, , так как .
Вызов
Напишите полную программу или функцию, которая принимает действительное число в качестве входных данных и возвращает или выводит его ультрарадикал.
Требования
Стандартные лазейки не допускаются. Результаты тестовых примеров, приведенных ниже, должны быть точными, по крайней мере, до 6 значащих цифр, но в целом программа должна рассчитывать соответствующие значения для любых действительных входных данных действительного числа.
Тестовые случаи
9 десятичных знаков, округленных до 0, приведены для справки. Объяснение добавлено для некоторых тестовых случаев.
a | UR(a)
---------------------------+---------------------
0 | 0.000 000 000 # 0
1 | -0.754 877 (666) # UR(a) < 0 when a > 0
-1 | 0.754 877 (666) # UR(a) > 0 when a < 0
1.414 213 562 | -0.881 616 (566) # UR(sqrt(2))
-2.718 281 828 | 1.100 93(2 665) # UR(-e)
3.141 592 653 | -1.147 96(5 385) # UR(pi)
-9.515 716 566 | 1.515 71(6 566) # 5th root of 8, fractional parts should match
10 | -1.533 01(2 798)
-100 | 2.499 20(3 570)
1 000 | -3.977 89(9 393)
-100 010 | 10.000 0(00 000) # a = (-10)^5 + (-10)
1 073 741 888 | -64.000 0(00 000) # a = 64^5 + 64
Критерии победы
Самое короткое действительное представление на каждом языке выигрывает.
источник
а
не↦
иᵀ
Python 3.8 (предварительная версия) , 60 байт
Попробуйте онлайн!
Метод итераций Ньютона.x′=x−f(x)f′(x)=x−x5+x+n5x4+1
При использовании4 х5- н5 х4+ 1 математически эквивалентно, это делает цикл программы вечным.
Другой подход:
Python 3.8 (предварительная версия) , 102 байта
Попробуйте онлайн!
Двоичный поиск, учитывая, что функция
x^5+x+a
увеличивается. Установить границы-abs(x)
иabs(x)
достаточно, но-x*x-1
иx*x+1
короче.Кстати, лимит рекурсии Python слишком мал, поэтому необходимо иметь 1e-9, и
:=
это называется оператором моржа.источник
JavaScript (ES7), 44 байта
Более безопасная версия, использующая ту же формулу, что и ниже, но с фиксированным числом итераций.
Попробуйте онлайн!
JavaScript (ES7),
4342 байтаМетод Ньютона, использующий5 х4+ 5 в качестве аппроксимации е'( х ) = 5 х4+ 1 .
Попробуйте онлайн!
Как?
Мы начинаем сИкс0= 0 и вычисляем рекурсивно:
покаИксК- хк + 1 будет незначительным.
источник
Желе , 8 байт
Попробуйте онлайн!
Как это работает:
Создает список
[a, 1, 0, 0, 0, 1]
, добавляяa
двоичное представление17
. Почему этот список? Потому что это соответствует коэффициентам, которые мы ищем:Затем,
Ær
является встроенным, который решает полиномиальное уравнениеP(x) = 0
, учитывая список коэффициентов (что мы построили ранее).Нас интересует только реальное решение, поэтому мы берем первую запись в списке решений с помощью
Ḣ
.источник
APL (Dyalog Unicode) ,
1110 байтов SBCS-1 благодаря дзайме
Функция анонимного молчаливого префикса.
Попробуйте онлайн!
(
…)⍣¯1
Примените следующую молчаливую функцию отрицательно:-
отрицательный аргумент-
минус*∘5
аргумент в пользу 5источник
R , 43 байта
Попробуйте онлайн!
nlm
nlm
a
источник
R , 56 байт
Попробуйте онлайн!
polyroot
polyroot
источник
polyroot
возвращает все сложные корни ... В противном случае он выиграл бы.J , 14 байт
Попробуйте онлайн!
J имеет встроенный для решения полиномов ...
p.
Тайм-аут последних 4 тестовых случаев на TIO, но в теории все еще верны.
как
Полиномиальные коэффициенты для J встроены в числовой список, с коэффициентом для
x^0
первого. Это означает, что список:1 0 0 0 1
равно 17 в двоичном коде, поэтому мы представляем его как#:@17
, затем добавляем входные данные,
, затем применяемp.
, затем распаковываем результаты с помощью raze;
, затем берем последний элемент{:
источник
Рубин ,
5341 байтПопробуйте онлайн!
Использование Ньютона-Рафсона с фиксированным числом итераций и тем же приемом аппроксимации, что и у Арно
источник
Par / GP ,
34322624 байтаПопробуйте онлайн!
источник
s(-100010)
результат,-8.090... - 5.877...*I
а не просто10
? Это ограничение языка для больших тестовых случаев? PS: Вы можете сохранить 2 байта меняющегося как0.2
в.2
. :)a->solve(X=-a,a,X^5+X+a)
.05AB1E , 12 байтов
Попробуйте онлайн!
Метод Ньютона.
источник
k4,
3331 байтНьютон-Рафсон вычисляется итеративно, пока число не сойдется
редактировать: -2 благодаря ngn!
упс, все неправильно понял ...
K (ок), 10 байтисточник
[
]
кажется ненужнымПари / ГП , 24 байта
Попробуйте онлайн!
источник
solve
есть аналогС, 118b / 96b
118 байтов с оригинальным именем функции и с некоторой дополнительной точностью (двойной). С битами хаки могут быть лучше, но непереносимы.
96 байт с фиксированными итерациями.
На самом деле, наша функция настолько хороша, что мы можем использовать лучшую адаптацию метода Ньютона. Намного более быстрая и практическая реализация (150 байт)
Я проверил, что это работает, но мне лень выяснить, насколько быстрее это будет. Должен быть как минимум на один порядок быстрее, чем у Ньютона.
источник
x-=t=...
работы?Чисто ,
6160 байтПопробуйте онлайн!
Метод Ньютона, впервые реализованный в ответе пользователя user202729 .
Чисто , 124 байта
Попробуйте онлайн!
«Бинарный» поиск, сужающий область поиска до верхних или нижних 99,6% диапазона между верхними и нижними границами на каждой итерации вместо 50%.
источник
Python 3 + sympy, 72 байта
Попробуйте онлайн!
источник
Октава , 25 байт
Попробуйте онлайн!
источник
Maplesoft Maple , 23 байта
К сожалению, нет онлайн компилятора / калькулятора Maple там AFAIK. Но код довольно прост.
источник