Liczba Dottiego jest stałym punktem funkcji cosinus lub rozwiązaniem równania cos (x) = x . 1
Twoim zadaniem będzie stworzenie kodu zbliżonego do tej stałej. Twój kod powinien reprezentować funkcję, która przyjmuje liczbę całkowitą jako dane wejściowe i generuje liczbę rzeczywistą. Granicą twojej funkcji wraz ze wzrostem wartości wejściowej powinna być liczba Dottie.
Możesz generować jako ułamek, dziesiętną lub algebraiczną reprezentację liczby. Twój wynik powinien być w stanie być dowolnie precyzyjny, liczba zmiennoprzecinkowa i liczba podwójna nie są wystarczające do tego wyzwania. Jeśli twój język nie jest w stanie podać dowolnych liczb dokładności, musisz je zaimplementować lub wybrać nowy język.
To jest pytanie w golfa kodu, więc odpowiedzi będą oceniane w bajtach, przy czym mniej bajtów będzie lepszych.
Porady
Jednym ze sposobów obliczania stałej jest pobranie dowolnej liczby i wielokrotne zastosowanie do niej cosinusa. Ponieważ liczba aplikacji zmierza w kierunku nieskończoności, wynik zmierza w kierunku stałego punktu cosinusa.
Oto dość dokładne przybliżenie liczby.
0.739085133215161
1: Tutaj weźmiemy cosinus w radianach
źródło
Decimal
?ÆẠȷ¡
zdaje sobie sprawę, że jest nieprawidłowy. Próbuje Brachylog; o nie, Brachylog nawet nie robi spławików.x=cos(x)
?Odpowiedzi:
MATL ,
343019 bajtów11 bajtów mniej dzięki Sanchises !
Ostatnie cyfry dziesiętne na wyjściu mogą być wyłączone. Jednak liczba poprawnych cyfr, zaczynając od lewej, zwiększa się wraz z danymi wejściowymi, a wynik jest zbieżny z rzeczywistą stałą.
Wypróbuj online!
Wyjaśnienie
Dla wejścia n i rozpoczynającego się od x = 1, dotyczy to funkcji
x ↦ cos ( x )
z n- cyfrową arytmetyką o zmiennej precyzji n razy.
źródło
Python 3 , 58 bajtów
Wypróbuj online!
źródło
evalf
w M : oGNU bc -l, 30
Wynik obejmuje +1 dla
-l
flagi dobc
.Ostateczna nowa linia jest znacząca i konieczna.
Wypróbuj online .
-l
robi 2 rzeczy:c()
dla cos (x)bc
ma dowolne obliczenia precyzji)Nie jestem do końca pewien wymagań dotyczących precyzji. W tej chwili program oblicza do 20 miejsc po przecinku. Jeśli wymagana jest inna precyzja,
scale=n;
należy ją wstawić na początku programu, gdzien
jest liczba miejsc dziesiętnych. Nie wiem, czy powinienem dodać to do mojego wyniku, czy nie.Należy również zauważyć, że w przypadku niektórych miejsc po przecinku (np. 21, ale nie 20) obliczenia oscylują po obu stronach rozwiązania w ostatniej cyfrze. Tak więc w porównaniu bieżącej i poprzedniej iteracji dzielę obie strony przez 10 (
A
), aby usunąć ostatnią cyfrę.źródło
Wolfram Language (Mathematica) , 22 bajty
Wypróbuj online!
źródło
PHP , 50 bajtów
Wypróbuj online!
źródło
for($a=$argv[1];$a--;)$j=cos($j);echo$j;
(40 bajtów) wystarczy.K: 6 bajtów
f/
obowiązuje,f
dopóki nie osiągnie ustalonego punktu.źródło
_
to podłoga w większości znanych mi wersji. w k4 i ok można uzyskać 5 bajtów za pomocącos/1
R (+ Rmpfr), 55 bajtów
Dennis dodał teraz Rmpfr do TIO, więc to zadziała; dodano kilka przypadków testowych.
Wyjaśnienie:
Wykonuje kod napisałem z tym wyzwaniem , aby ocenić
cos
n
razy zaczynają się1
, ale najpierw określić precyzję chcę być w wartości poprzez utworzenie obiektub
klasympfr
z wartości1
i precyzjąn
,n>=2
tak możemy uzyskać większą precyzję jak idziemy.Wypróbuj online!
źródło
Oktawa , 42 bajty
Wypróbuj online!
Prawie duplikat mojej odpowiedzi na przybliżoną liczbę plastikową , ale nieco krótszy ze względu na bardziej zrelaksowane wymagania.
źródło
dzaima / APL , 55 bajtów
1
Brak linku do TIO, ponieważ dzaima / APL TIO nie zostało zaktualizowane do obsługi bigintegerów.
Przykład I / O:
źródło
Mathics or Mathematica, 46 bajtów
Wypróbuj online!
źródło
Pyth ,
5754 bajtówByłoby to znacznie krótsze, gdybyśmy nie potrzebowali Decimal, aby był zgodny ze specyfikacją, ale tak właśnie jest.
Edytuj 1: -3 bajty, ponieważ i tak potrzebujemy liczby, więc możemy użyć
X
zwróconej kopiiglobals()
długości jako naszej wartości początkowej, przenosząc ją do końca i usuwając a$
oraz trochę białych znaków.Wypróbuj online!
źródło
APL (Dyalog Unicode) , 9 bajtów
Wypróbuj online!
( Uwaga: TIO ma dodatkowy
⎕←
; jest to wymagane przez TIO. „Autonomiczny” interpreter APL użyłby dokładnego wyrażenia pokazanego powyżej. Podana liczba bajtów jest tym, co TIO oblicza dla powyższego wyrażenia, a nie dla tego z⎕←
. )Rozkład / objaśnienie:
Przy pierwszym obliczeniu funkcji cos x (2 ○ x), przy x = 1, nie będą one równe. cos 1 wynosi 0,5403 ..., więc dokonaj ponownej oceny, zastępując 1 wartością 0,5403 ... i powtarzaj proces, aż (2 ○ x) = x, co występuje dla x = 0,73908 ...
Tworząc to, użyłem domyślnej wartości dla „precyzji drukowania”, którą można ustawić w APL za pomocą ⎕PP ←; maksymalna wartość ⎕PP dozwolona przez Dyalog APL to 34 cyfry.
Ponadto domyślną precyzją dla tej implementacji są liczby zmiennoprzecinkowe 64-bitowe; można użyć 128-bitowych liczb zmiennoprzecinkowych, ustawiając ⎕FR ← 1287. Obliczanie TIO odbywa się przy użyciu 64-bitowych liczb zmiennoprzecinkowych.
Żadna faktyczna implementacja języka komputerowego nie może dać prawdziwie arbitralnej precyzji; Jednak kod dla teoretycznego APL że nie realizować dowolną precyzję byłby dokładnie taki sam .
źródło
⎕CT←0
i prawdopodobnie przypisać dane wejściowe do⎕FPC
.Your output should be capable of being arbitrarily precise, floats and doubles are not sufficient for this challenge.
Python - 89 bajtów
Wykorzystuje moduł dziesiętny.
źródło
Perl 5, 41 bajtów
Bignum jest wymagane dla dowolnej precyzji. Definiuje funkcję f, która rekurencyjnie stosuje cosinus do 0 N razy.
Wydaje się, że TIO nie ma bignum, więc nie ma linku :(
źródło
Mathematica 44 bajtów
FindRoot
domyślnie używa metody Newtona.źródło
Python 2, 86 bajtów
Nowa wersja za pomocą dostarczonej końcówki.
Python 2, 105 bajtów
Wykorzystuje metodę Newtona i funkcję rekurencyjną do obliczania wartości.
x
jest wartością początkową in
stanowi limit rekurencji.źródło
n
zgodnie z wymaganiami, więc musisz ustawić domyślniex=0
. Również ta funkcja nie jest arbitralnie precyzyjna, ponieważmath.cos
jest to stała precyzja.Aksjomat, 174 bajty
nie golfił i komentował
wyniki:
Użyłbym metody Newtona, ponieważ byłaby szybsza niż „metoda powtórzonych cos (x)”
gdzie w pierwszej kolumnie jest liczba cyfr, a w drugiej kolumnie jest o ile metoda Newtona jest szybsza niż w przypadku powtarzanej metody cos (x), tutaj. Dzień dobry
źródło
Stax , 5 bajtów
Uruchom i debuguj Wyjaśnienie:
źródło
Your output should be capable of being arbitrarily precise, floats and doubles are not sufficient for this challenge.
JavaScript (Node.js) , 84 bajtów
Wypróbuj online!
Ma dokładność z grubsza
n-1
cyfr. BigInt jest używany icos(x)
jest obliczany na podstawie jego rozszerzenia Taylora. TaI-Z>>2n
część jest używana tylko w celu uniknięcia zapętlenia na zawsze (z kosztem 4 bajtów i pewną precyzją). Chociaż teoretycznie ma zastosowanie do dowolnej precyzji, praktyczny zasięgn<63
wynika z przepełnienia stosu.Krótszy (82 bajty), nie martw się przepełnieniem stosu, ale znacznie mniej precyzji
Znacznie krótszy (80 bajtów), większy zakres aż do przepełnienia stosu (
n<172
), ale taka sama precyzja jak 82 bajty.Jeśli arbitralna precyzja nie jest głównym punktem, to 25 bajtów:
źródło