stringtranslate.com

Métodos para calcular raíces cuadradas

Los métodos para calcular raíces cuadradas son algoritmos para aproximar la raíz cuadrada no negativa de un número real positivo . Dado que todas las raíces cuadradas de números naturales , excepto las de cuadrados perfectos , son irracionales , [1] las raíces cuadradas normalmente sólo pueden calcularse con cierta precisión finita: estos métodos suelen construir una serie de aproximaciones cada vez más precisas .

La mayoría de los métodos de cálculo de raíz cuadrada son iterativos: después de elegir una estimación inicial adecuada de , se realiza un refinamiento iterativo hasta que se cumple algún criterio de terminación. Un esquema de refinamiento es el método de Heron, un caso especial del método de Newton . Si la división es mucho más costosa que la multiplicación, puede ser preferible calcular la raíz cuadrada inversa.

Hay otros métodos disponibles para calcular la raíz cuadrada dígito a dígito o utilizando series de Taylor. Las aproximaciones racionales de raíces cuadradas se pueden calcular utilizando expansiones de fracciones continuas.

El método empleado depende de la precisión necesaria y de las herramientas y la potencia computacional disponibles. Los métodos pueden clasificarse a grandes rasgos como aquellos adecuados para el cálculo mental, aquellos que normalmente requieren al menos papel y lápiz, y aquellos que se implementan como programas para ejecutarse en una computadora electrónica digital u otro dispositivo informático. Los algoritmos pueden tener en cuenta la convergencia (cuántas iteraciones se requieren para lograr una precisión específica), la complejidad computacional de operaciones individuales (es decir, división) o iteraciones y la propagación de errores (la precisión del resultado final).

Algunos métodos, como la división sintética con lápiz y papel y la expansión de series, no requieren un valor inicial. En algunas aplicaciones, se requiere una raíz cuadrada entera , que es la raíz cuadrada redondeada o truncada al entero más cercano (en este caso se puede emplear un procedimiento modificado).

Historia

Los procedimientos para encontrar raíces cuadradas (particularmente la raíz cuadrada de 2 ) se conocen al menos desde el período de la antigua Babilonia en el siglo XVII a.C. Los matemáticos babilónicos calcularon la raíz cuadrada de 2 a tres "dígitos" sexagesimales después del 1, pero no se sabe exactamente cómo. Sabían cómo aproximar una hipotenusa usando

[2]

El método de Heron del Egipto del siglo I fue el primer algoritmo determinable para calcular la raíz cuadrada. [3]

Los métodos analíticos modernos comenzaron a desarrollarse después de la introducción del sistema de numeración arábiga en Europa occidental a principios del Renacimiento. [ cita necesaria ]

Hoy en día, casi todos los dispositivos informáticos tienen una función de raíz cuadrada rápida y precisa, ya sea como una construcción de lenguaje de programación, una función intrínseca del compilador o de biblioteca, o como un operador de hardware, basado en uno de los procedimientos descritos.

Estimación inicial

Muchos algoritmos iterativos de raíz cuadrada requieren un valor inicial . La semilla debe ser un número positivo distinto de cero; debe estar entre 1 y , el número cuya raíz cuadrada se desea, porque la raíz cuadrada debe estar en ese rango. Si la semilla está lejos de la raíz, el algoritmo requerirá más iteraciones. Si uno se inicializa con (o ), entonces se desperdiciarán aproximadamente iteraciones solo para obtener el orden de magnitud de la raíz. Por lo tanto, es útil contar con una estimación aproximada, que puede tener una precisión limitada pero que es fácil de calcular. En general, cuanto mejor sea la estimación inicial, más rápida será la convergencia. Para el método de Newton (también llamado método babilónico o de Heron), una semilla algo más grande que la raíz convergerá ligeramente más rápido que una semilla algo más pequeña que la raíz.

En general, una estimación se realiza de acuerdo con un intervalo arbitrario que se sabe que contiene la raíz (como ). La estimación es un valor específico de una aproximación funcional a lo largo del intervalo. Obtener una mejor estimación implica obtener límites más estrictos en el intervalo o encontrar una mejor aproximación funcional a . Esto último suele significar el uso de un polinomio de orden superior en la aproximación, aunque no todas las aproximaciones son polinomiales. Los métodos comunes de estimación incluyen escalar, lineal, hiperbólico y logarítmico. Generalmente se utiliza una base decimal para realizar estimaciones mentales o con lápiz y papel. Una base binaria es más adecuada para estimaciones por computadora. Al estimar, el exponente y la mantisa generalmente se tratan por separado, ya que el número se expresaría en notación científica.

Estimaciones decimales

Normalmente, el número se expresa en notación científica como donde y n es un número entero, y el rango de posibles raíces cuadradas es donde .

Estimaciones escalares

Los métodos escalares dividen el rango en intervalos y la estimación en cada intervalo se representa mediante un único número escalar. Si el rango se considera como un intervalo único, los tiempos de la media aritmética (5.5) o la media geométrica ( ) son estimaciones plausibles. El error absoluto y relativo para estos será diferente. En general, un solo escalar será muy inexacto. Las mejores estimaciones dividen el rango en dos o más intervalos, pero las estimaciones escalares tienen una precisión inherentemente baja.

Para dos intervalos, divididos geométricamente, la raíz cuadrada se puede estimar como [Nota 1]

Esta estimación tiene un error absoluto máximo de a = 100 y un error relativo máximo de 100% en a = 1.

Por ejemplo, para factorizado como , la estimación es . , un error absoluto de 246 y un error relativo de casi el 70%.

Estimaciones lineales

Una mejor estimación, y el método estándar utilizado, es una aproximación lineal a la función sobre un arco pequeño. Si, como se indicó anteriormente, las potencias de la base se factorizan a partir del número y el intervalo se reduce a , se puede usar como aproximación una línea secante que abarque el arco o una línea tangente en algún lugar a lo largo del arco, pero una línea de regresión de mínimos cuadrados cruzar el arco será más preciso.

Una línea de regresión de mínimos cuadrados minimiza la diferencia promedio entre la estimación y el valor de la función. Su ecuación es . Reordenamiento, . Redondeando los coeficientes para facilitar el cálculo,

Esa es la mejor estimación en promedio que se puede lograr con una aproximación lineal de una sola pieza de la función y=x 2 en el intervalo . Tiene un error absoluto máximo de 1,2 en a=100 y un error relativo máximo del 30% en S=1 y 10. [Nota 2]

Para dividir por 10, resta uno del exponente de o, en sentido figurado, mueve la coma decimal un dígito hacia la izquierda. Para esta formulación, cualquier constante aditiva 1 más un pequeño incremento generará una estimación satisfactoria, por lo que recordar el número exacto no es una carga. La aproximación (redondeada o no) utilizando una sola línea que abarca el rango tiene menos de un dígito significativo de precisión; el error relativo es mayor que 1/2 2 , por lo que se proporcionan menos de 2 bits de información. La precisión es muy limitada porque el rango es de dos órdenes de magnitud, bastante grande para este tipo de estimación.

Se puede obtener una estimación mucho mejor mediante una aproximación lineal por partes: múltiples segmentos de línea, cada uno de los cuales se aproxima a algún subarco del original. Cuantos más segmentos de línea se utilicen, mejor será la aproximación. La forma más común es utilizar líneas tangentes; las decisiones críticas son cómo dividir el arco y dónde colocar los puntos tangentes. Una forma eficaz de dividir el arco de y  = 1 a y  = 100 es geométricamente: para dos intervalos, los límites de los intervalos son la raíz cuadrada de los límites del intervalo original, 1×100, es decir, [1, 2100 ] y [ 2100 ,100]. Para tres intervalos, los límites son las raíces cúbicas de 100: [1, 3100 ], [ 3100 ,( 3100 ) 2 ] y [( 3100 ) 2 ,100], etc. intervalos, 2100 = 10, un número muy conveniente. Las rectas tangentes son fáciles de derivar y están ubicadas en x = 1* 10 y x = 10* 10 . Sus ecuaciones son: y . Invirtiendo, las raíces cuadradas son: y . Así para :

Los errores absolutos máximos ocurren en los puntos altos de los intervalos, en a = 10 y 100, y son 0,54 y 1,7 respectivamente. Los errores relativos máximos se encuentran en los puntos finales de los intervalos, en a =1, 10 y 100, y son del 17% en ambos casos. 17% o 0,17 es mayor que 1/10, por lo que el método produce menos de un dígito decimal de precisión.

Estimaciones hiperbólicas

En algunos casos, las estimaciones hiperbólicas pueden ser eficaces, porque una hipérbola también es una curva convexa y puede estar a lo largo de un arco de Y = x 2 mejor que una línea. Las estimaciones hiperbólicas son más complejas desde el punto de vista computacional porque necesariamente requieren una división flotante. Una aproximación hiperbólica casi óptima a x 2 en el intervalo es y=190/(10-x)-20. Transponiendo, la raíz cuadrada es x = -190/(y+20)+10. Así para :

La división flotante debe tener una precisión de solo un dígito decimal, porque la estimación general es solo esa precisión y se puede hacer mentalmente. Una estimación hiperbólica es mejor en promedio que una estimación escalar o lineal. Tiene un error absoluto máximo de 1,58 en 100 y un error relativo máximo de 16,0% en 10. Para el peor caso en a=10, la estimación es 3,67. Si se comienza con 10 y se aplican las iteraciones de Newton-Raphson de inmediato, se necesitarán dos iteraciones, lo que arrojará 3,66, antes de que se supere la precisión de la estimación hiperbólica. Para un caso más típico como 75, la estimación hiperbólica es 8,00 y se necesitarían 5 iteraciones de Newton-Raphson comenzando en 75 para obtener un resultado más preciso.

Estimaciones aritméticas

Un método análogo a la aproximación lineal por partes pero que utiliza sólo ecuaciones aritméticas en lugar de algebraicas, utiliza las tablas de multiplicar a la inversa: la raíz cuadrada de un número entre 1 y 100 está entre 1 y 10, por lo que si sabemos que 25 es un cuadrado perfecto (5 × 5), y 36 es un cuadrado perfecto (6 × 6), entonces la raíz cuadrada de un número mayor o igual a 25 pero menor que 36, comienza con un 5. Lo mismo ocurre con los números entre otros cuadrados. Este método producirá un primer dígito correcto, pero no es exacto a un dígito: el primer dígito de la raíz cuadrada de 35, por ejemplo, es 5, pero la raíz cuadrada de 35 es casi 6.

Una mejor manera es dividir el rango en intervalos a mitad de camino entre los cuadrados. Entonces, cualquier número entre 25 y la mitad de 36, que es 30,5, estima 5; cualquier número mayor que 30,5 hasta 36, ​​estima 6. [Nota 3] El procedimiento sólo requiere un poco de aritmética para encontrar un número límite en medio de dos productos de la tabla de multiplicar. Aquí hay una tabla de referencia de esos límites:

La operación final es multiplicar la estimación k por la potencia de diez dividido por 2, por lo que ,

El método produce implícitamente un dígito significativo de precisión, ya que redondea al mejor primer dígito.

El método se puede ampliar a 3 dígitos significativos en la mayoría de los casos, interpolando entre los cuadrados más cercanos que delimitan el operando. Si , entonces es aproximadamente k más una fracción, la diferencia entre a y k 2 dividida por la diferencia entre los dos cuadrados:

La operación final, como arriba, es multiplicar el resultado por la potencia de diez dividido por 2;

k es un dígito decimal y R es una fracción que debe convertirse a decimal. Por lo general, tiene un solo dígito en el numerador y uno o dos dígitos en el denominador, por lo que la conversión a decimal se puede realizar mentalmente.

Ejemplo: encuentre la raíz cuadrada de 75. 75 = 75 × 10 · 0 , entonces a es 75 y n es 0. De las tablas de multiplicar, la raíz cuadrada de la mantisa debe ser 8 puntos porque 8 × 8 es 64, pero 9 × 9 es 81, demasiado grande, entonces k es 8; algo es la representación decimal de R . La fracción R es 75 - k 2 = 11, el numerador, y 81 - k 2 = 17, el denominador. 17/11 es un poco menos que 18/12, que es 2/3 o 0,67, así que suponga 0,66 (aquí está bien adivinar, el error es muy pequeño). Entonces la estimación es 8 + 0,66 = 8,66 . 75 con tres dígitos significativos es 8,66, por lo que la estimación es buena con 3 dígitos significativos. No todas las estimaciones que utilicen este método serán tan precisas, pero sí cercanas.

Estimaciones binarias

Cuando se trabaja en el sistema numérico binario (como lo hacen internamente las computadoras), al expresar como dónde , la raíz cuadrada se puede estimar como

que es la línea de regresión de mínimos cuadrados con coeficientes de 3 dígitos significativos. tiene un error absoluto máximo de 0,0408 en =2 y un error relativo máximo de 3,0% en =1. Una estimación redondeada computacionalmente conveniente (porque los coeficientes son potencias de 2) es:

[Nota 4]

que tiene un error absoluto máximo de 0,086 en 2 y un error relativo máximo de 6,1% en a = 0,5 y a = 2,0 .

Para , la aproximación binaria da . , por lo que la estimación tiene un error absoluto de 19 y un error relativo del 5,3%. El error relativo es un poco menor que 1/2 4 , por lo que la estimación es buena para 4+ bits.

Se puede obtener una estimación de hasta 8 bits mediante una búsqueda en la tabla de los 8 bits superiores de , recordando que el bit superior está implícito en la mayoría de las representaciones de punto flotante, y el bit inferior de los 8 debe redondearse. La tabla tiene 256 bytes de valores de raíz cuadrada de 8 bits precalculados. Por ejemplo, para el índice 11101101 2 que representa 1.8515625 10 , la entrada es 10101110 2 que representa 1.359375 10 , la raíz cuadrada de 1.8515625 con una precisión de 10 a 8 bits (más de 2 dígitos decimales).

método de garza

El primer algoritmo explícito para la aproximación se conoce como método de Herón , en honor al matemático griego del siglo I, Héroe de Alejandría , que describió el método en su obra Métrica del año 60 d.C. [3] Este método también se llama método babilónico (no debe confundirse con el método babilónico para aproximar hipotenusas), aunque no hay evidencia de que los babilonios conocieran el método.

Dado un número real positivo , sea x 0 > 0 cualquier estimación inicial positiva. El método de Heron consiste en calcular iterativamente

Esto equivale a utilizar el método de Newton para resolver . Este algoritmo es cuadráticamente convergente : el número de dígitos correctos de aproximadamente se duplica con cada iteración.

Derivación

La idea básica es que si x es una sobreestimación de la raíz cuadrada de un número real no negativo S, entoncesS/Xserá una subestimación, y viceversa, por lo que se puede esperar razonablemente que el promedio de estos dos números proporcione una mejor aproximación (aunque la prueba formal de esa afirmación depende de la desigualdad de las medias aritméticas y geométricas que muestra que este promedio es siempre una sobreestimación). de la raíz cuadrada, como se señala en el artículo sobre raíces cuadradas , asegurando así la convergencia).

Más precisamente, si x es nuestra estimación inicial y ε es el error en nuestra estimación tal que S = ( x + ε ) 2 , entonces podemos expandir el binomio

desde .

Por lo tanto, podemos compensar el error y actualizar nuestra estimación anterior como

Este algoritmo funciona igualmente bien en los números p -ádicos , pero no se puede utilizar para identificar raíces cuadradas reales con raíces cuadradas p -ádicas; uno puede, por ejemplo, construir una secuencia de números racionales mediante este método que converja a +3 en los reales, pero a −3 en los 2-ádicos.

Ejemplo

Para calcular S , donde S = 125348, con seis cifras significativas, utilice el método de estimación aproximado anterior para obtener

Por lo tanto, 125348 ≈ 354,045 .

Convergencia

Gráficos semilogarítmicos que comparan la velocidad de convergencia del método de Heron para encontrar la raíz cuadrada de 100 para diferentes conjeturas iniciales. Las conjeturas negativas convergen a la raíz negativa y las positivas a la raíz positiva. Tenga en cuenta que los valores más cercanos a la raíz convergen más rápido y todas las aproximaciones son sobreestimaciones. En el archivo SVG, coloque el cursor sobre un gráfico para mostrar sus puntos.

Supongamos que x 0 > 0 y S > 0. Entonces, para cualquier número natural n , x n > 0. Sea el error relativo en x n definido por

Entonces se puede demostrar que

Y así eso

cuadrática

El peor caso para la convergencia

Si se utiliza la estimación aproximada anterior con el método babilónico, los casos menos precisos en orden ascendente son los siguientes:

Así, en cualquier caso,

Los errores de redondeo ralentizarán la convergencia. Se recomienda mantener al menos un dígito adicional más allá de la precisión deseada del x n que se calcula para minimizar el error de redondeo.

método bakhshali

Este método para encontrar una aproximación a una raíz cuadrada se describió en un antiguo manuscrito indio , llamado manuscrito Bakhshali . Es equivalente a dos iteraciones del método babilónico que comienzan con x 0 . Por lo tanto, el algoritmo es cuárticamente convergente, lo que significa que el número de dígitos correctos de la aproximación aproximadamente se cuadriplica con cada iteración. [4] La presentación original, usando notación moderna, es la siguiente: Para calcular , sea la aproximación inicial a . Luego, itere sucesivamente como:

Esto se puede utilizar para construir una aproximación racional a la raíz cuadrada comenzando con un número entero. Si se elige un número entero cercano a y es la diferencia cuyo valor absoluto se minimiza, entonces la primera iteración se puede escribir como:

El método Bakhshali se puede generalizar al cálculo de una raíz arbitraria, incluidas las raíces fraccionarias. [5]

Ejemplo

Usando el mismo ejemplo dado con el método babilónico, entonces, la primera iteración da

Asimismo, la segunda iteración da

Cálculo dígito por dígito

Este es un método para encontrar cada dígito de la raíz cuadrada en una secuencia. Este método se basa en el teorema del binomio y básicamente en un algoritmo de resolución inverso . Es más lento que el método babilónico, pero tiene varias ventajas:

Las desventajas son:

Los huesos de Napier incluyen una ayuda para la ejecución de este algoritmo. El algoritmo de desplazamiento de raíz n- ésima es una generalización de este método.

Principio básico

Primero, considere el caso de encontrar la raíz cuadrada de un número Z , es decir, el cuadrado de un número de dos dígitos XY , donde X es el dígito de las decenas e Y es el dígito de las unidades. Específicamente:

Ahora , usando el algoritmo dígito por dígito, primero determinamos el valor de X. X es el dígito más grande tal que X 2 es menor o igual que Z del cual eliminamos los dos dígitos más a la derecha.

En la siguiente iteración, emparejamos los dígitos, multiplicamos X por 2 y lo colocamos en el lugar de las décimas mientras intentamos calcular cuál es el valor de Y.

Dado que este es un caso simple donde la respuesta es una raíz cuadrada perfecta XY , el algoritmo se detiene aquí.

La misma idea se puede extender a cualquier cálculo arbitrario de raíz cuadrada a continuación. Supongamos que podemos encontrar la raíz cuadrada de N expresándola como una suma de n números positivos tales que

Aplicando repetidamente la identidad básica

Esta expresión nos permite encontrar la raíz cuadrada adivinando secuencialmente los valores de s. Supongamos que los números ya han sido adivinados, entonces el m -ésimo término del lado derecho de la suma anterior viene dado por dónde está la raíz cuadrada aproximada encontrada hasta ahora. Ahora cada nueva suposición debería satisfacer la recursividad.

Por ejemplo, en el sistema numérico decimal tenemos

Aquí, dado que el valor posicional de es una potencia par de 10, solo necesitamos trabajar con el par de dígitos más significativos del término restante en cualquier etapa m-ésima. La siguiente sección codifica este procedimiento.

Es obvio que se puede utilizar un método similar para calcular la raíz cuadrada en sistemas numéricos distintos del sistema numérico decimal. Por ejemplo, encontrar la raíz cuadrada dígito por dígito en el sistema numérico binario es bastante eficiente ya que el valor de se busca a partir de un conjunto más pequeño de dígitos binarios {0,1}. Esto hace que el cálculo sea más rápido ya que en cada etapa el valor de es for o for . El hecho de que solo tengamos dos opciones posibles para también facilita el proceso de decidir el valor de en la m -ésima etapa del cálculo. Esto se debe a que solo necesitamos verificar si se cumple esta condición, entonces tomamos ; si no, entonces Además, el hecho de que la multiplicación por 2 se realice mediante desplazamientos de bits a la izquierda ayuda en el cálculo.

decimales (base 10)

Escribe el número original en forma decimal. Los números se escriben de manera similar al algoritmo de división larga y, como en la división larga, la raíz se escribirá en la línea de arriba. Ahora separe los dígitos en pares, comenzando desde el punto decimal y yendo hacia la izquierda y hacia la derecha. El punto decimal de la raíz estará encima del punto decimal del cuadrado. Un dígito de la raíz aparecerá encima de cada par de dígitos del cuadrado.

Comenzando con el par de dígitos más a la izquierda, realice el siguiente procedimiento para cada par:

  1. Comenzando por la izquierda, baje el par de dígitos más significativo (el más a la izquierda) que aún no se haya usado (si se han usado todos los dígitos, escriba "00") y escríbalos a la derecha del resto del paso anterior (en el primer paso, no quedará ningún resto). En otras palabras, multiplica el resto por 100 y suma los dos dígitos. Este será el valor actual c .
  2. Encuentre p , y y x , de la siguiente manera:
    • Sea p la parte de la raíz encontrada hasta ahora , ignorando cualquier punto decimal. (Para el primer paso, p = 0.)
    • Determine el dígito mayor x tal que . Usaremos una nueva variable y = x (20 p + x ).
      • Nota: 20 p + x es simplemente el doble de p , con el dígito x añadido a la derecha.
      • Nota: x se puede encontrar adivinando qué es c /(20· p ) y haciendo un cálculo de prueba de y , luego ajustando x hacia arriba o hacia abajo según sea necesario.
    • Coloque el dígito como el siguiente dígito de la raíz, es decir, encima de los dos dígitos del cuadrado que acaba de bajar. Por lo tanto, la siguiente p será la antigua p multiplicada por 10 más x .
  3. Resta y de c para formar un nuevo resto.
  4. Si el resto es cero y no hay más dígitos que bajar, entonces el algoritmo ha terminado. De lo contrario, vuelva al paso 1 para realizar otra iteración.

Ejemplos

Encuentra la raíz cuadrada de 152,2756.

  1 2. 3 4 / \/ 01 52.27 56 01 1*1 <= 1 < 2*2x=1 01 y = x*x = 1*1 = 1 00 52 22*2 <= 52 < 23*3x=2 00 44 y = (20+x)*x = 22*2 = 44 08 27 243*3 <= 827 < 244*4x=3 07 29 y = (240+x)*x = 243*3 = 729 98 56 2464*4 <= 9856 < 2465*5x=4 98 56 y = (2460+x)*x = 2464*4 = 9856 00 00 El algoritmo termina: Respuesta=12.34

Sistema de numeración binario (base 2)

Esta sección utiliza el formalismo de la sección anterior de cálculo dígito por dígito, con la ligera variación que permitimos , con cada o . Repetimos todo , desde abajo hasta , y construimos una solución aproximada , la suma de todo para la cual hemos determinado el valor. Para determinar si es igual a o , dejamos . Si (es decir, el cuadrado de nuestra solución aproximada incluida no excede el cuadrado objetivo), entonces , en caso contrario y . Para evitar elevar al cuadrado en cada paso, almacenamos la diferencia y la actualizamos incrementalmente configurándola con . Inicialmente, nos fijamos en el más grande con .



Como optimización adicional, almacenamos y , los dos términos de en caso de que sea distinto de cero, en variables separadas ,:

y se puede actualizar eficientemente en cada paso:

Tenga en cuenta que:

Una implementación de este algoritmo en C: [6]

int32_t isqrt ( int32_t n ) {    afirmar (( "la entrada sqrt debe ser no negativa" , n > 0 ));    // X_(n+1) int32_tx = n ; _    // c_n int32_tc = 0 ; _    // d_n que comienza en la potencia más alta de cuatro <= n int32_t d = 1 << 30 ; // El segundo bit superior está establecido.       // Igual que ((sin firmar) INT32_MAX + 1) / 2. mientras ( re > norte ) {     re >>= 2 ;   } // para dₙ … d₀ mientras ( d ! = 0 ) {     if ( x >= c + d ) { // si X_(m+1) ≥ Y_m entonces a_m = 2^m        x -= c + d ; // X_m = X_(m+1) - Y_m      c = ( c >> 1 ) + re ; // c_(m-1) = c_m/2 + d_m (a_m es 2^m)        } demás {  c >>= 1 ; // c_(m-1) = c_m/2 (aₘ es 0)    } re >>= 2 ; // d_(m-1) = d_m/4    } devolver c ; //c_(-1)  }

Se pueden implementar algoritmos más rápidos, en binario y decimal o cualquier otra base, mediante el uso de tablas de búsqueda, lo que de hecho intercambia más espacio de almacenamiento por un tiempo de ejecución reducido . [7]

Identidad exponencial

Las calculadoras de bolsillo generalmente implementan buenas rutinas para calcular la función exponencial y el logaritmo natural , y luego calculan la raíz cuadrada de S usando la identidad encontrada usando las propiedades de los logaritmos ( ) y exponenciales ( ): [ cita necesaria ]

enésimatablas de logaritmosreglas de cálculo

Un método iterativo de dos variables.

Este método es aplicable para encontrar la raíz cuadrada de y converge mejor para . Sin embargo, esto no es una limitación real para un cálculo basado en computadora, ya que en las representaciones de punto flotante y punto fijo de base 2, es trivial multiplicar por una potencia entera de 4 y, por lo tanto , por la correspondiente potencia de 2, por cambiando el exponente o desplazando, respectivamente. Por lo tanto, se puede mover al rango . Además, el siguiente método no emplea divisiones generales, sino sólo sumas, restas, multiplicaciones y divisiones por potencias de dos, que también son triviales de implementar. Una desventaja del método es que se acumulan errores numéricos, a diferencia de los métodos iterativos de una sola variable como el babilónico.

El paso de inicialización de este método es

La convergencia de , y por tanto también de , es cuadrática.

La prueba del método es bastante sencilla. Primero, reescribe la definición iterativa de como

Este método fue desarrollado alrededor de 1950 por MV Wilkes , DJ Wheeler y S. Gill [8] para su uso en EDSAC , una de las primeras computadoras electrónicas. [9] El método se generalizó posteriormente, permitiendo el cálculo de raíces no cuadradas. [10]

Métodos iterativos para raíces cuadradas recíprocas.

Los siguientes son métodos iterativos para encontrar la raíz cuadrada recíproca de S , que es . Una vez encontrado, encuentre por simple multiplicación: . Estas iteraciones implican sólo multiplicación y no división. Por tanto, son más rápidos que el método babilónico. Sin embargo, no son estables. Si el valor inicial no está cerca de la raíz cuadrada recíproca, las iteraciones se alejarán de él en lugar de converger hacia él. Por lo tanto, puede resultar ventajoso realizar una iteración del método babilónico con una estimación aproximada antes de comenzar a aplicar estos métodos.

algoritmo de Goldschmidt

Algunas computadoras utilizan el algoritmo de Goldschmidt para calcular y simultáneamente . El algoritmo de Goldschmidt encuentra más rápido que la iteración de Newton-Raphson en una computadora con una instrucción de multiplicar-suma fusionada y una unidad de punto flotante canalizada o dos unidades de punto flotante independientes. [11]

Comienza la primera forma de escribir el algoritmo de Goldschmidt

(normalmente utilizando una búsqueda de tabla)

e itera

Comienza una segunda forma, que utiliza operaciones fusionadas de suma múltiple .

(normalmente utilizando una búsqueda de tabla)

e itera

serie de taylor

Si N es una aproximación a , se puede encontrar una mejor aproximación utilizando la serie de Taylor de la función de raíz cuadrada :

Como método iterativo, el orden de convergencia es igual al número de términos utilizados. Con dos términos, es idéntico al método babilónico. Con tres términos, cada iteración requiere casi tantas operaciones como la aproximación de Bakhshali, pero converge más lentamente. [ cita necesaria ] Por lo tanto, esta no es una forma de cálculo particularmente eficiente. Para maximizar la tasa de convergencia, elija N para que sea lo más pequeño posible.

Expansión de fracción continua

La representación de fracción continua de un número real se puede utilizar en lugar de su expansión decimal o binaria y esta representación tiene la propiedad de que la raíz cuadrada de cualquier número racional (que aún no sea un cuadrado perfecto) tiene una expansión periódica y repetida, similar a cómo los números racionales tienen expansiones repetidas en el sistema de notación decimal.

Los irracionales cuadráticos (números de la forma , donde a , byc son números enteros) y, en particular, las raíces cuadradas de números enteros, tienen fracciones continuas periódicas . A veces lo que se desea es encontrar no el valor numérico de una raíz cuadrada, sino su expansión fraccionaria continua y, por tanto, su aproximación racional. Sea S el número positivo para el cual debemos encontrar la raíz cuadrada. Luego, suponiendo que a es un número que sirve como estimación inicial y r es el término restante, podemos escribir Como tenemos , podemos expresar la raíz cuadrada de S como

Aplicando esta expresión al término denominador de la fracción, tenemos

Notación compacta

La expansión del numerador/denominador para fracciones continuas (ver a la izquierda) es complicada de escribir e incrustar en sistemas de formato de texto. Por eso los matemáticos han ideado varias notaciones alternativas, como [12]

En todo momento, una notación aún más compacta es: [13]

Para fracciones continuas repetidas (lo que hacen todas las raíces cuadradas de cuadrados no perfectos), la repetición se representa solo una vez, con una línea superpuesta para indicar una repetición no terminante de la parte superpuesta: [14]

Para 2 , el valor de es 1, por lo que su representación es:

Procediendo de esta manera, obtenemos una fracción continua generalizada para la raíz cuadrada como

El primer paso para evaluar dicha fracción [15] y obtener una raíz es hacer sustituciones numéricas de la raíz del número deseado y el número de denominadores seleccionados. Por ejemplo, en forma canónica, es 1 y para 2 , es 1, por lo que la fracción continua numérica para 3 denominadores es:

El paso 2 consiste en reducir la fracción continua de abajo hacia arriba, un denominador a la vez, para obtener una fracción racional cuyo numerador y denominador sean números enteros. La reducción procede así (tomando los tres primeros denominadores):

Finalmente (paso 3), divide el numerador por el denominador de la fracción racional para obtener el valor aproximado de la raíz:

El valor real de 2 es 1,41 con tres dígitos significativos. El error relativo es del 0,17%, por lo que la fracción racional tiene una precisión de casi tres dígitos. Tomar más denominadores da sucesivamente mejores aproximaciones: cuatro denominadores dan como resultado la fracción , con una precisión de casi 4 dígitos, etc.

Los siguientes son ejemplos de raíces cuadradas, sus fracciones simples continuas y sus primeros términos, llamados convergentes , hasta el denominador 99 inclusive:

En general, cuanto mayor sea el denominador de una fracción racional, mejor será la aproximación. También se puede demostrar que truncar una fracción continua produce una fracción racional que es la mejor aproximación a la raíz de cualquier fracción con denominador menor o igual al denominador de esa fracción; por ejemplo, ninguna fracción con un denominador menor o igual a 70 es una aproximación tan buena a 2 como 99/70.

Aproximaciones que dependen de la representación en coma flotante

Un número se representa en un formato de punto flotante , lo que también se denomina notación científica . Su raíz cuadrada es y se aplicarían fórmulas similares para raíces cúbicas y logaritmos. A primera vista, esto no supone ninguna mejora en cuanto a simplicidad, pero supongamos que sólo se requiere una aproximación: entonces sólo es bueno en un orden de magnitud. A continuación, reconozca que algunas potencias, p , serán impares, por lo tanto, para 3141,59 = 3,14159 × 103 en lugar de tratar con potencias fraccionarias de la base, multiplica la mantisa por la base y resta uno a la potencia para igualarla. La representación ajustada pasará a ser el equivalente a 31,4159 × 102 para que la raíz cuadrada sea31.4159 × 101 .

Si se toma la parte entera de la mantisa ajustada, solo pueden existir los valores del 1 al 99, y eso podría usarse como índice en una tabla de 99 raíces cuadradas precalculadas para completar la estimación. Una computadora que use base dieciséis requeriría una tabla más grande, pero una que use base dos requeriría sólo tres entradas: los bits posibles de la parte entera de la mantisa ajustada son 01 (siendo la potencia aun así no hubo desplazamiento, recordando que una computadora normalizada número de coma flotante siempre tiene un dígito de orden superior distinto de cero) o si la potencia era impar, 10 u 11, siendo estos los dos primeros bits de la mantisa original. Por lo tanto, 6,25 = 110,01 en binario, normalizado a 1,1001 × 2 2 una potencia par, por lo que los bits emparejados de la mantisa son 01, mientras que 0,625 = 0,101 en binario se normaliza a 1,01 × 2 −1 una potencia impar, por lo que el ajuste es 10,1 × 2 −2 y los bits emparejados son 10. Observe que el bit de orden inferior de la potencia se repite en el bit de orden superior de la mantisa por pares. Una potencia par tiene su bit de orden inferior cero y la mantisa ajustada comenzará con 0, mientras que para una potencia impar ese bit es uno y la mantisa ajustada comenzará con 1. Así, cuando la potencia se reduce a la mitad, es como si El bit de orden inferior se desplaza para convertirse en el primer bit de la mantisa por pares.

Una tabla con sólo tres entradas podría ampliarse incorporando bits adicionales de la mantisa. Sin embargo, con las computadoras, en lugar de calcular una interpolación en una tabla, a menudo es mejor encontrar algún cálculo más simple que proporcione resultados equivalentes. Ahora todo depende de los detalles exactos del formato de la representación, además de qué operaciones están disponibles para acceder y manipular las partes del número. Por ejemplo, Fortran ofrece una EXPONENT(x)función para obtener el poder. El esfuerzo invertido en diseñar una buena aproximación inicial debe recuperarse evitando así las iteraciones adicionales del proceso de refinamiento que habrían sido necesarias para una mala aproximación. Dado que son pocos (una iteración requiere dividir, sumar y reducir a la mitad), la restricción es severa.

Muchas computadoras siguen la representación IEEE (o suficientemente similar), y se puede obtener una aproximación muy rápida a la raíz cuadrada al iniciar el método de Newton. La técnica que sigue se basa en el hecho de que el formato de punto flotante (en base dos) se aproxima al logaritmo de base 2. Eso es

Entonces, para un número de punto flotante de precisión simple de 32 bits en formato IEEE (donde, en particular, la potencia tiene un sesgo de 127 agregado para la forma representada), puede obtener el logaritmo aproximado interpretando su representación binaria como un entero de 32 bits, escalando. por y eliminando un sesgo de 127, es decir

Por ejemplo, 1.0 está representado por un número hexadecimal 0x3F800000, que representaría si se tomara como un número entero. Usando la fórmula anterior obtienes , como se esperaba de . De manera similar, obtienes 0,5 de 1,5 (0x3FC00000).

Para obtener la raíz cuadrada, divide el logaritmo entre 2 y vuelve a convertir el valor. El siguiente programa demuestra la idea. Se permite intencionalmente que el bit más bajo del exponente se propague hacia la mantisa. Una forma de justificar los pasos de este programa es asumir que el sesgo del exponente es el número de bits almacenados explícitamente en la mantisa y luego demostrar que

/* Se supone que float está en el formato de punto flotante de precisión simple IEEE 754 */ #include <stdint.h> float sqrt_approx ( float z ) { union { float f ; uint32_ti ; _ } valor = { z }; /* Convertir tipo, preservando el patrón de bits */ /*  * Para justificar el siguiente código, demuestre que  *  * ((((val.i / 2^m) - b) / 2) + b) * 2^m = ( (val.i - 2^m) / 2) + ((b + 1) / 2) * 2^m)  *  * donde  *  * b = sesgo del exponente  * m = número de bits de mantisa  */ val . yo -= 1 << 23 ; /* Resta 2^m. */ val . yo >>= 1 ; /* Dividir por 2. */ val . yo += 1 << 29 ; /* Sumar ((b + 1) / 2) * 2^m. */                      valor de retorno . f ; /* Interpretar nuevamente como flotante */ } 

Las tres operaciones matemáticas que forman el núcleo de la función anterior se pueden expresar en una sola línea. Se puede agregar un ajuste adicional para reducir el error relativo máximo. Entonces, las tres operaciones, sin incluir el elenco, se pueden reescribir como

vale . yo = ( 1 << 29 ) + ( valor . yo >> 1 ) - ( 1 << 22 ) + a ;              

donde a es un sesgo para ajustar los errores de aproximación. Por ejemplo, con a = 0 los resultados son precisos para potencias pares de 2 (por ejemplo, 1,0), pero para otros números los resultados serán ligeramente demasiado grandes (por ejemplo, 1,5 para 2,0 en lugar de 1,414... con un error del 6%). Con a = −0x4B0D2, el error relativo máximo se minimiza a ±3,5%.

Si se va a utilizar la aproximación para una estimación inicial del método de Newton para la ecuación , entonces se prefiere la forma recíproca que se muestra en la siguiente sección.

Recíproco de la raíz cuadrada

A continuación se incluye una variante de la rutina anterior, que se puede utilizar para calcular el recíproco de la raíz cuadrada; es decir, fue escrita por Greg Walsh. La aproximación de desplazamiento de enteros produjo un error relativo de menos del 4%, y el error cayó aún más al 0,15% con una iteración del método de Newton en la línea siguiente. [16] En gráficos por computadora es una forma muy eficiente de normalizar un vector.

flotar invSqrt ( flotar x ) { flotar xhalf = 0.5f * x ; unión { flotador x ; int yo ; } tu ; tu . x = x ; tu . yo = 0x5f375a86 - ( tu . yo >> 1 ); /* La siguiente línea se puede repetir cualquier número de veces para aumentar la precisión */ u . x = tu . x * ( 1.5f - xhalf * u . x * u . x ); devolverte . _ X ; }                                         

Algunos hardware VLSI implementan la raíz cuadrada inversa utilizando una estimación polinómica de segundo grado seguida de una iteración de Goldschmidt . [17]

Cuadrado negativo o complejo

Si S  < 0, entonces su raíz cuadrada principal es

Si S  =  a + bi donde a y b son reales y b  ≠ 0, entonces su raíz cuadrada principal es

Esto se puede verificar elevando la raíz al cuadrado. [18] [19] Aquí

es el módulo de S . La raíz cuadrada principal de un número complejo se define como la raíz con la parte real no negativa.

Ver también

Notas

  1. ^ Los factores dos y seis se utilizan porque aproximan las medias geométricas de los valores más bajos y más altos posibles con el número de dígitos dado: y .
  2. ^ La estimación no redondeada tiene un error absoluto máximo de 2,65 en 100 y un error relativo máximo del 26,5% en y=1, 10 y 100.
  3. ^ Si el número está exactamente a medio camino entre dos cuadrados, como 30,5, adivina el número mayor, que en este caso es 6
  4. ^ Esta es, dicho sea de paso, la ecuación de la recta tangente a y  =  x 2 en y  = 1.

Referencias

  1. ^ Jackson 2011.
  2. ^ Fowler y Robson 1998.
  3. ^ ab Heath 1921.
  4. ^ Bailey y Borwein 2012.
  5. ^ Simplemente curioso 2018.
  6. ^ Chico y UKC 1985.
  7. ^ Steinarson, Corbit y Hendry 2003.
  8. ^ Wilkes, Wheeler y Gill 1951.
  9. ^ Campbell-Kelly 2009.
  10. ^ Gower 1958.
  11. ^ Markstein 2004.
  12. ^ ver: fracción continua generalizada#Notación
  13. ^ ver: Fracción continua#Notaciones
  14. ^ ver: fracción continua periódica
  15. ^ Sardina 2007, 2.3j en la p.10.
  16. ^ Lomont 2003.
  17. ^ Piñeiro y Díaz Bruguera 2002.
  18. ^ Abramowitz y Stegun 1964, sección 3.7.26.
  19. ^ Cooke 2008.

Bibliografía

enlaces externos