Esta operación se puede utilizar en la conversión de coordenadas cartesianas a coordenadas polares . También proporciona una notación y terminología sencillas para algunas fórmulas cuando sus sumandos son complicados; por ejemplo, la relación energía-momento en física se convierte
en Se implementa en muchas bibliotecas de programación como la función hipot , de una manera diseñada para evitar errores que surgen debido a cálculos de precisión limitada realizados en computadoras. En sus aplicaciones al procesamiento de señales y propagación de la incertidumbre de medición , la misma operación también se llama adición en cuadratura ; [2] está relacionada con la media cuadrática o "raíz cuadrada media".
La suma pitagórica repetida permite hallar el diámetro de un cuboide rectángulo . Esta es la distancia más larga entre dos puntos, la longitud de la diagonal del cuerpo del cuboide. Para un cuboide con lados de longitud , , y , esta longitud es .
Si las mediciones tienen errores independientes respectivamente, el método de cuadratura proporciona el error general,
mientras que el límite superior del error general es
si los errores no fueran independientes. [5]
En el procesamiento de señales, se utiliza la adición en cuadratura para encontrar el ruido general de fuentes de ruido independientes. Por ejemplo, si un sensor de imagen proporciona seis números digitales de ruido de disparo , tres de ruido de corriente oscura y dos de ruido de Johnson-Nyquist bajo una condición específica, el ruido general son
números digitales, [6] lo que muestra el predominio de fuentes de ruido más grandes.
Los números reales bajo no son un grupo , porque nunca pueden producir un número negativo como su resultado, mientras que cada elemento de un grupo debe ser el resultado de aplicar la operación de grupo a sí mismo y al elemento identidad . En los números no negativos, todavía no es un grupo, porque la adición pitagórica de un número por un segundo número positivo solo puede aumentar el primer número, por lo que ningún número positivo puede tener un elemento inverso . En cambio, forma un monoide conmutativo en los números no negativos, con cero como su identidad.
Implementación
Hypot es una función matemática definida para calcular la longitud de la hipotenusa de un triángulo rectángulo. Fue diseñada para evitar errores que surgen debido a cálculos de precisión limitada realizados en computadoras. Calcular la longitud de la hipotenusa de un triángulo es posible utilizando la función raíz cuadrada en la suma de dos cuadrados , pero la función hypot evita los problemas que ocurren al elevar al cuadrado números muy grandes o muy pequeños. Si se calcula utilizando la fórmula natural,
los cuadrados de valores muy grandes o muy pequeños de y pueden exceder el rango de precisión de la máquina cuando se calculan en una computadora, lo que lleva a un resultado inexacto causado por desbordamiento y subdesbordamiento aritmético . La función hypot fue diseñada para calcular el resultado sin causar este problema. [8]
Desde C++17 , existe una función hipot adicional para cálculos 3D: [10]
Orden de cálculo
La dificultad con la implementación ingenua es que puede desbordarse o desbordarse, a menos que el resultado intermedio se calcule con precisión extendida . Una técnica de implementación común es intercambiar los valores, si es necesario, de modo que , y luego usar la forma equivalente
El cálculo de no puede desbordarse a menos que ambos y sean cero. Si se desborda por debajo de su valor, el resultado final es igual a , lo cual es correcto dentro de la precisión del cálculo. La raíz cuadrada se calcula de un valor entre 1 y 2. Finalmente, la multiplicación por no puede desbordarse por debajo de su valor, y se desborda solo cuando el resultado es demasiado grande para ser representado. [8] Esta implementación tiene la desventaja de que requiere una división de punto flotante adicional, que puede duplicar el costo de la implementación ingenua, ya que la multiplicación y la suma son típicamente mucho más rápidas que la división y la raíz cuadrada. Normalmente, la implementación es más lenta por un factor de 2,5 a 3. [11]
Las implementaciones más complejas evitan esto dividiendo las entradas en más casos:
En caso de desbordamiento, multiplique ambos por un factor de escala pequeño (por ejemplo, 2 −64 para precisión simple IEEE), utilice el algoritmo ingenuo que ahora no se desbordará y multiplique el resultado por el inverso (grande) (por ejemplo, 2 64 ).
En caso de desbordamiento, escale como se indicó anteriormente pero invierta los factores de escala para aumentar los valores intermedios.
De lo contrario, es seguro utilizar el algoritmo ingenuo.
Sin embargo, esta implementación es extremadamente lenta cuando provoca predicciones de salto incorrectas debido a diferentes casos. Las técnicas adicionales permiten calcular el resultado con mayor precisión, por ejemplo, a menos de un ulp . [8]
Soporte de lenguaje de programación
La función de adición pitagórica está presente como la función hipot en muchos lenguajes de programación y bibliotecas, incluyendo CSS , [12] C++11 , [13] D , [14] Fortran (desde Fortran 2008), [15] Go , [16] JavaScript (desde ES2015), [17] Julia , [18] Java (desde la versión 1.5), [19] Kotlin , [20] MATLAB , [21] PHP , [22] Python , [23] Ruby , [24] Rust , [25]
y Scala . [26]
Metafont tiene la suma y resta pitagórica como operaciones integradas, bajo los nombres ++y +-+respectivamente.
^ Moler, Cleve; Morrison, Donald (1983). "Reemplazo de raíces cuadradas por sumas pitagóricas". Revista IBM de investigación y desarrollo . 27 (6): 577–581. CiteSeerX 10.1.1.90.5651 . doi :10.1147/rd.276.0577.
^ Johnson, David L. (2017). "12.2.3 Adición en cuadratura". Herramientas estadísticas para la práctica integral de las ciencias de la higiene industrial y la salud ambiental . John Wiley & Sons. pág. 289. ISBN9781119143017.
^ "SIN (3M): Funciones trigonométricas y sus inversas". Manual del programador de Unix: Guía de referencia (versión virtual VAX-11 de Berkeley Software Distribution 4.3). Departamento de Ingeniería Eléctrica y Ciencias de la Computación, Universidad de California, Berkeley. Abril de 1986.
^ Beebe, Nelson HF (2017). Manual de cálculo de funciones matemáticas: programación con la biblioteca de software portátil MathCW. Springer. pág. 70. ISBN9783319641102.
^ DB Schneider, Análisis de errores en sistemas de medición, Actas de la Conferencia de laboratorio de normas de 1962, página 94
^ JT Bushberg et al, La física esencial de las imágenes médicas, sección 10.2.7, Wolters Kluwer Health
^ Falmagne, Jean-Claude (2015). "Derivar leyes científicas significativas a partir de axiomas abstractos de tipo" gedanken ": cinco ejemplos". Aecuaciones Mathematicae . 89 (2): 393–435. doi :10.1007/s00010-015-0339-1. SEÑOR 3340218. S2CID 121424613.
^ abc Borges, Carlos F. (2021). "Algoritmo 1014: Un algoritmo mejorado para hipot(x, y)". ACM Transactions on Mathematical Software . 47 (1): 9:1–9:12. arXiv : 1904.09481 . doi :10.1145/3428446. S2CID 230588285.
^ Fog, Agner (27 de abril de 2020). "Seguimiento de excepciones de punto flotante y propagación de NAN" (PDF) . pág. 6.
^ Medido en ARM y x64 (Intel y AMD) para diferentes compiladores con máxima optimización para flotantes de 32 bits y 64 bits.
^ Cimpanu, Catalin. "CSS obtendrá soporte para funciones trigonométricas". ZDNet . Consultado el 1 de noviembre de 2019 .
^ "Hypot - Referencia de C++".
^ "STD.math - Lenguaje de programación D".
^ "Las novedades de Fortran 2008" (PDF) .
^ "Paquete de matemáticas - math - PKG.go.dev".
^ "Math.hypot() - JavaScript | MDN". 21 de febrero de 2023.
^ "Matemáticas · el lenguaje de Julia".
^ "Matemáticas (plataforma Java 2 SE 5.0)".
^ "hypot - Lenguaje de programación Kotlin". Kotlin . Consultado el 19 de marzo de 2018 .
^ "Raíz cuadrada de la suma de cuadrados (Hipotenusa) - MATLAB hypot - MathWorks Benelux".
^ "PHP: Hipoteca - Manual".
^ "Matemáticas — Funciones matemáticas — Documentación de Python 3.9.7".
^ "Módulo: Matemáticas (Ruby 3.0.2)".
^ "F64 - Óxido".
^ "Biblioteca estándar de Scala 2.13.6 - scala.math".
Lectura adicional
Dubrulle, Augustin A. (1983). "Una clase de métodos numéricos para el cálculo de sumas pitagóricas" (PDF) . IBM Journal of Research and Development . 27 (6): 582–589. CiteSeerX 10.1.1.94.3443 . doi :10.1147/rd.276.0582..