Su tarea es calcular la raíz cuadrada de 2 utilizando el Método de Newton, con un ligero giro. Su programa es calcular una iteración utilizando el Método de Newton y generar el código fuente para la siguiente iteración (que debe ser capaz de hacer lo mismo).
El método de Newton se describe de manera bastante exhaustiva en Wikipedia.
Para calcular la raíz cuadrada 2 utilizando el método de Newton, usted:
- Definir
f(x) = x^2 - 2
- Definir
f'(x) = 2x
- Definir
x[0]
(la suposición inicial)= 1
- Definir
x[n+1] = x[n] - (f[n] / f'[n])
Cada iteración moverá x [n] más cerca de la raíz cuadrada de dos. Asi que -
x[0] = 1
x[1] = x[0] - f(x[0])/f'(x[0]) = 1 - (1 ^ 2 - 2) / (2 * 1) = 1.5
x[2] = x[1] - f(x[1])/f'(x[1]) = 1.5 - (1.5 ^ 2 - 2) / (2 * 1.5) = 1.416666667
x[3] = x[2] - f(x[2])/f'(x[1]) = 1.416666667 - (1.416666667 ^ 2 - 2) / (2 * 1.416666667) = 1.414215686
- y así
Tu programa:
- Calcule
x[n]
dónden
es la cantidad de veces que se ejecutó el programa - Envíe el código fuente a un programa válido en el mismo idioma que debe calcular
x[n+1]
y satisfacer los mismos criterios de esta pregunta. - La primera línea del código fuente debe ser el resultado del cálculo, debidamente comentado. Si la fuente requiere algo particular (como un shebang) en la primera línea, el resultado puede colocarse en la segunda línea.
Tenga en cuenta que
- Su programa debe usar una conjetura inicial de
x[0] = 1
- Se aplican las lagunas estándar
- Cualquier poder incorporado, raíz cuadrada o funciones xroot están prohibidas
- Su programa no debe aceptar ninguna entrada. Debe ser completamente autónomo.
Su puntaje es el tamaño de su programa inicial en bytes UTF-8. El puntaje más bajo gana.
x = x-(x*x-2)/(2*x)
?Respuestas:
Lisp común,
223956866Ahora que leí el enunciado del problema con más atención (¡gracias, primo !) Noté que la primera línea debe ser el resultado del cálculo, no que necesita contener el resultado. Por lo tanto, creo que mis intentos anteriores no siguieron las reglas. Este debería.
Ejemplo de uso (SBCL 1.1.15):
fuente
Python 60 bytes
He simplificado la fórmula ligeramente, usando las siguientes sustituciones:
Espero que no sea un problema.
El programa procede de la siguiente manera:
etc.
fuente
g="x=%s;o=%r;print o%%(x/2+1/x,o)";print g%(1.5,g)
50 caracteres.CJam, 20 bytes
Pruébalo en línea.
Salida
Cómo funciona
fuente
ECMAScript 6,
3836JavaScript, 51
Esto es lo mismo que el anterior, para navegadores antiguos.
fuente
print
,putstr
,console.log
, etc.).Lua 129
Probablemente demasiado tiempo, pero la quilla de Lua apesta porque la anidada
[[ ]]
es una característica obsoleta. Pero funciona independientemente:Es un poco más agradable ver si agrega nuevas líneas en lugar de dos puntos:
fuente
J -
10288 bytesEsto es tan horrible como estoy haciendo quines (probablemente revisaré esto cuando tenga mejores ideas). Las carrozas de J están limitadas a 5 decimales, pero al reemplazar la primera línea con
x=:1x
ella sería una fracción con precisión infinita.Primeras iteraciones:
Explicación
fuente
1%x
es el mismo que%x
. En lugar de(x%2)+1%x
, puedes hacerlo(%&2+%)x
.Rubí, 65
Como sucede con demasiada frecuencia, este es casi un puerto directo de la solución Python.
fuente