Co to jest ultradźwiękowe
Ultraradical lub Doprowadzić rodnik liczby rzeczywistej jest zdefiniowane jako jedynym realnym korzenia Quintic równaniu .
Tutaj używamy do oznaczenia funkcji ultraradycznej. Na przykład , ponieważ .
Wyzwanie
Napisz pełny program lub funkcję, która pobiera liczbę rzeczywistą jako dane wejściowe i zwraca lub wysyła jej wartość ultraradyczną.
Wymagania
Nie są dozwolone żadne standardowe luki. Wyniki dla poniższych przypadków testowych muszą być dokładne z co najmniej 6 cyframi znaczącymi, ale ogólnie program powinien obliczyć odpowiednie wartości dla dowolnych ważnych liczb rzeczywistych.
Przypadki testowe
Jako odniesienie podano 9 miejsc po przecinku zaokrąglonych w kierunku 0. W niektórych przypadkach testowych dodano objaśnienie.
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
Zwycięskie kryteria
Wygrywa najkrótsze ważne zgłoszenie w każdym języku.
źródło
i
zamiast↦
iᵀ
Python 3.8 (wersja wstępna) , 60 bajtów
Wypróbuj online!
Metoda iteracji Newtona.x′=x−f(x)f′(x)=x−x5+x+n5x4+1
Podczas używania4x5−n5x4+1 jest matematycznie równoważne, co powoduje, że program zapętla się na zawsze.
Inne podejście:
Python 3.8 (wersja wstępna) , 102 bajty
Wypróbuj online!
Wyszukiwanie binarne, biorąc pod uwagę, że funkcja
x^5+x+a
rośnie. Ustaw granice na-abs(x)
iabs(x)
wystarczy, ale-x*x-1
ix*x+1
jest krótszy.Limit rekurencji BTW Pythona jest nieco zbyt niski, więc konieczne jest posiadanie 1e-9, i
:=
nazywa się to operatorem morsa.źródło
JavaScript (ES7), 44 bajty
Bezpieczniejsza wersja korzystająca z tej samej formuły co poniżej, ale ze stałą liczbą iteracji.
Wypróbuj online!
JavaScript (ES7),
4342 bajtyWypróbuj online!
W jaki sposób?
źródło
Galaretka , 8 bajtów
Wypróbuj online!
Jak to działa:
Konstruuje listę
[a, 1, 0, 0, 0, 1]
, przygotowująca
się do binarnej reprezentacji17
. Dlaczego ta lista? Ponieważ odpowiada to szukanym przez nas współczynnikom:Następnie
Ær
jest wbudowany, który rozwiązuje równanie wielomianoweP(x) = 0
, biorąc pod uwagę listę współczynników (co zbudowaliśmy wcześniej).Interesuje nas tylko prawdziwe rozwiązanie, dlatego pierwszy wpis na liście rozwiązań wprowadzamy za pomocą
Ḣ
.źródło
APL (Dyalog Unicode) ,
1110 bajtów SBCS-1 dzięki dzaima
Anonimowa ukryta funkcja prefiksu.
Wypróbuj online!
(
…)⍣¯1
Zastosuj jednorazowo następującą funkcję ukrytą:-
negowany argument-
minus*∘5
argument podniesiony do potęgi 5źródło
R , 43 bajty
Wypróbuj online!
nlm
nlm
a
źródło
R , 56 bajtów
Wypróbuj online!
polyroot
polyroot
źródło
polyroot
zwraca wszystkie złożone korzenie… W przeciwnym razie wygrałby.J , 14 bajtów
Wypróbuj online!
J ma wbudowane rozwiązanie rozwiązywania wielomianów ...
p.
Ostatnie 4 przypadki testowe przekroczyły limit czasu dla TIO, ale teoretycznie są nadal poprawne.
w jaki sposób
Współczynniki wielomianowe dla wbudowanych J są traktowane jako lista numeryczna, ze współczynnikiem dla
x^0
pierwszego. Oznacza to, że lista jest:1 0 0 0 1
ma wartość binarną 17, więc reprezentujemy ją jako#:@17
, następnie dołączamy dane wejściowe,
, następnie stosujemyp.
, następnie rozpakowujemy wyniki za pomocą raze;
, a następnie bierzemy ostatni element{:
źródło
Rubin ,
5341 bajtówWypróbuj online!
Używanie Newtona-Raphsona ze stałą liczbą iteracji i tą samą sztuczką przybliżającą, co Arnauld
źródło
Pari / GP ,
34322624 bajtówWypróbuj online!
źródło
s(-100010)
skutkuje-8.090... - 5.877...*I
zamiast po prostu10
? Czy jest to ograniczenie języka dla dużych przypadków testowych? PS: Możesz zapisać 2 bajty, zmieniając oba0.2
na.2
. :)a->solve(X=-a,a,X^5+X+a)
.05AB1E , 12 bajtów
Wypróbuj online!
Metoda Newtona.
źródło
k4,
3331 bajtówNewton-Raphson obliczał iteracyjnie, aż liczba zostanie zbiegnięta
edycja: -2 dzięki ngn!
Ups, źle to wszystko zrozumiałem ...
K (oK), 10 bajtówźródło
[
]
wydaje się zbędnePari / GP , 24 bajty
Wypróbuj online!
źródło
solve
ma analogC, 118b / 96b
118 bajtów z oryginalną nazwą funkcji iz pewną dodatkową dokładnością (podwójnie). Z bitami hacki mogą być lepsze, ale nie można ich przenosić.
96 bajtów ze stałą iteracją.
W rzeczywistości nasza funkcja jest tak dobra, że możemy użyć lepszych adaptacji metody Newtona. Byłoby to znacznie szybsze i praktyczne wdrożenie (150 bajtów)
Sprawdziłem, czy to działa, ale jestem zbyt leniwy, aby dowiedzieć się, o ile to by było szybsze. Powinno być co najmniej o jedno zamówienie szybsze niż Newtona.
źródło
x-=t=...
praca?Czysty ,
6160 bajtówWypróbuj online!
Metoda Newtona, po raz pierwszy zaimplementowana w odpowiedzi user202729 .
Czysty , 124 bajty
Wypróbuj online!
Wyszukiwanie „binarne”, zawężające obszar wyszukiwania do górnej lub dolnej 99,6% zakresu między górną i dolną granicą przy każdej iteracji zamiast 50%.
źródło
Python 3 + sympy, 72 bajty
Wypróbuj online!
źródło
Oktawa , 25 bajtów
Wypróbuj online!
źródło
Klon Maplesoft , 23 bajty
Niestety nie ma online kompilatora / kalkulatora Maple AFAIK. Ale kod jest dość prosty.
źródło