(edit, 9 años más tarde... hola desarrolladores inteligentes de contratos, ¡sé que por eso están aquí jaja)
¿Cuál es el algoritmo más rápido para encontrar la raíz cuadrada de un número?
Creé uno que puede encontrar la raíz cuadrada de "$987654321$" a $16$ lugares decimales en solo $20$ iteraciones
He probado el método de Newton y también mi propio método (el código de Newton se encuentra a continuación)
¿Cuál es el algoritmo conocido más rápido para tomar la segunda raíz de un número?
Mi código para el Método de Newton (*Edit: hubo un error en mi código, está corregido en los comentarios de abajo):
a=2 //2a raíz
b=97654321 //base
n=1 //suposición inicial
c=0 //iteración actual (esta es una variable cambiante)
r=500000 //número total de iteraciones a ejecutar
while (c " + c)
}
7 votos
Tu intento con el método de Newton suena poco realista: Newton / Herón tiene convergencia cuadrática. Incluso comenzando con $x_0=1$ da un error $<10^{-24}$ después de 20 iteraciones.
0 votos
¿Has visto estos métodos? en.wikipedia.org/wiki/Methods_of_computing_square_roots
0 votos
No estoy seguro de qué hice mal... el método que estaba utilizando y que pensé que era el método de Newton tomó alrededor de 200,000 iteraciones y no llegó a la respuesta correcta jaja.... hmm
0 votos
Agregué mi código de algoritmos por si algún programador quiere intentarlo y mostrarme mi error
1 votos
¡Vaya, no te molestaste en comparar tu código con la respuesta de Hagen tú mismo? Necesitas
a*n
en lugar dea*b
en el denominador.0 votos
¡Lo siento, aún no lo había visto!
0 votos
¡a*n funcionó genial! ¡Debo haber leído mal el algoritmo cuando estaba escribiendo este código O:)
0 votos
Sé que este es un foro de matemáticas, no de programación, pero la velocidad va a depender de cómo escribas el código, tanto como de las fórmulas que uses. Un código optimizado se ejecutará más rápido que la implementación obvia, incluso si aparentemente realiza más operaciones aritméticas o utiliza más iteraciones. Y algunos algoritmos son más fáciles de optimizar que otros. En resumen, contar las operaciones aritméticas y las iteraciones es solo una parte de la historia. Los babilonios y Newton no tenían computadoras, por lo que este problema no surgía para ellos :-)
2 votos
Echa un vistazo a esta publicación en SO stackoverflow.com/questions/295579/… Muestra la forma más rápida de encontrar la raíz cuadrada y verificar si es un entero o no.
0 votos
Ingrese un número positivo: 1987654321 Paso iterativo 1 = 3.31276e+08 Paso iterativo 2 = 1.10425e+08 Paso iterativo 3 = 3.68084e+07 Paso iterativo 4 = 1.22695e+07 Paso iterativo 5 = 4.08999e+06 Paso iterativo 6 = 1.36376e+06 Paso iterativo 7 = 455882 Paso iterativo 8 = 155824 Paso iterativo 9 = 62978.6 Paso iterativo 10 = 45031.4 Paso iterativo 11 = 44583.1 Paso iterativo 12 = 44583.1 Valor convergente = 44583.1 Program ended with exit code: 0
1 votos
LOL — últimamente he estado recibiendo tantas visitas en esta pregunta que hice en 2013 y me preguntaba por qué... hoy mientras programaba solidity necesitaba una raíz cuadrada barata y estaba usando el método babilónico, luego me pregunté si había una manera más eficiente, y al buscar en Google me trajo de vuelta a mi propia pregunta. Ahora puedo concluir que casi todos en esta reciente oleada de visitas son compañeros desarrolladores de contratos inteligentes tratando de obtener raíces cuadradas baratas en la cadena de bloques jajaja. ¡Hola mundo!