El número de Dottie es el punto fijo de la función coseno, o la solución a la ecuación cos (x) = x . 1
Su tarea será hacer un código que se aproxime a esta constante. Su código debe representar una función que toma un número entero como entrada y genera un número real. El límite de su función a medida que crece la entrada debe ser el número Dottie.
Puede generar una fracción, un decimal o una representación algebraica de un número. Su salida debe ser capaz de ser arbitrariamente precisa, los flotadores y los dobles no son suficientes para este desafío. Si su idioma no es capaz de números de precisión arbitrarios, debe implementarlos o elegir un nuevo idioma.
Esta es una pregunta de código de golf , por lo que las respuestas se puntuarán en bytes, con menos bytes mejor.
Consejos
Una forma de calcular la constante es tomar cualquier número y aplicarle repetidamente el coseno. Como el número de aplicaciones tiende hacia el infinito, el resultado tiende hacia el punto fijo del coseno.
Aquí hay una aproximación bastante precisa del número.
0.739085133215161
1: Aquí tomaremos coseno en radianes
fuente
Decimal
?ÆẠȷ¡
da cuenta de que no es válido. Intenta Brachylog; oh no, Brachylog ni siquiera hace carrozas.Respuestas:
MATL ,
343019 bytes¡11 bytes de descuento gracias a Sanchises !
Las últimas cifras decimales en la salida pueden estar apagadas. Sin embargo, el número de cifras correctas a partir de la izquierda aumenta con la entrada, y el resultado converge a la constante real.
Pruébalo en línea!
Explicación
Para la entrada n , y comenzando en x = 1, esto aplica la función
x ↦ cos ( x )
con aritmética de precisión variable de n dígitos n veces.
fuente
Python 3 , 58 bytes
Pruébalo en línea!
fuente
evalf
en M : oPHP , 50 bytes
Pruébalo en línea!
fuente
for($a=$argv[1];$a--;)$j=cos($j);echo$j;
(40 bytes) es suficiente.GNU bc -l, 30
La puntuación incluye +1 para la
-l
banderabc
.La nueva línea final es significativa y necesaria.
Pruébalo en línea .
-l
hace 2 cosas:c()
para cos (x)bc
tiene un cálculo de precisión arbitrario)No tengo muy claro el requisito de precisión. Tal como están las cosas, este programa calcula hasta 20 decimales. Si se requiere una precisión diferente, entonces
scale=n;
debe insertarse al comienzo del programa, donden
está el número de lugares decimales. No sé si debo agregar esto a mi puntaje o no.Tenga en cuenta también que para algunos números de decimales (por ejemplo, 21, pero no 20), el cálculo oscila a ambos lados de la solución en el último dígito. Por lo tanto, en la comparación de las iteraciones actuales y anteriores, divido ambos lados entre 10 (
A
) para borrar el último dígito.fuente
Mathematica, 22 bytes
entrada
salida
fuente
R (+ Rmpfr), 55 bytes
Dennis ahora ha agregado Rmpfr a TIO para que esto funcione; Se agregaron algunos casos de prueba.
Explicación:
Toma el código que escribí de este desafío para evaluar los
cos
n
tiempos a partir de1
, pero primero especifico la precisión en la que quiero que estén los valores creando un objetob
de clasempfr
con valor1
y precisiónn
,n>=2
, por lo que obtener una mayor precisión a medida que avanzamos.Pruébalo en línea!
fuente
Octava , 42 bytes
Pruébalo en línea!
Prácticamente un duplicado de mi respuesta a Aproximar el número de plástico , pero algo más corto debido a requisitos más relajados.
fuente
Mathics o Mathematica, 46 bytes
Pruébalo en línea!
fuente
K: 6 bytes
f/
se aplicaf
hasta que alcanza un punto fijo.fuente
Python - 89 bytes
Utiliza el módulo decimal.
fuente
Perl 5, 41 Bytes
Se requiere Bignum para la precisión arbitraria. Define una función f que aplica el coseno recursivamente a 0 N veces.
TIO no parece tener bignum, así que no hay enlace :(
fuente
Mathematica 44 Bytes
FindRoot
usa el método de Newton por defecto.fuente
Python 2, 86 bytes
Nueva versión con la punta provista.
Python 2, 105 bytes
Utiliza el método de Newton y la función recursiva para calcular el valor.
x
es el valor inicial yn
es el límite de recursividad.fuente
Axioma, 174 bytes
no golfista y comentado
resultados:
Usaría el método de Newton porque sería más rápido que el 'método cos (x) repetido'
donde en la primera columna está el número de dígitos y en la segunda columna, cuánto es el método de Newton más rápido que el método repetido cos (x), aquí. Buenos días
fuente