Me gustaría hacer un cálculo de hypot2 en un procesador de 16 bits.Cómo hacer el cálculo de hypot2 (x, y) cuando los números pueden desbordar
La fórmula estándar es c = sqrt((a * a) + (b * b))
. El problema con esto es con grandes entradas que se desborda. P.ej. 200 y 250, multiplique 200 * 200 para obtener 90,000, que es mayor que el valor máximo de 32,767 firmado, por lo que se desborda, como hace b, los números se agregan y el resultado puede ser inútil; incluso podría indicar una condición de error debido a un sqrt negativo.
En mi caso, estoy tratando con números de 32 bits, pero la multiplicación de 32 bits en mi procesador es muy rápida, alrededor de 4 ciclos. Estoy usando un microcontrolador dsPIC. Prefiero no tener que multiplicar con números de 64 bits porque eso está desperdiciando memoria preciosa e indudablemente será más lento. Además, solo tengo sqrt para números de 32 bits, por lo que los números de 64 bits requerirían otra función. Entonces, ¿cómo puedo calcular una hipótesis cuando los valores pueden ser grandes?
Tenga en cuenta que realmente solo puedo usar números enteros para esto. Usar algo como matemáticas de coma flotante implica un golpe de velocidad que prefiero evitar. Mi procesador tiene una rutina rápida integer/punto fijo atan2, alrededor de 130 ciclos; ¿podría usar esto para calcular la longitud de la hipotenusa?
"Mi procesador tiene una rutina atan2 número entero rápido/punto fijo, alrededor de 130 ciclos; podría I usar esto para calcular la longitud de la hipotenusa" dsPIC tiene una atan2 pero no un hypot ?! Estoy vagamente familiar con los PIC y me sorprende escucharlo. –
@Jason S es una rutina de software de punto fijo. –
¿Podría publicar un enlace a su rutina de software? Si está relacionado con CORDIC, obtienes tanto el ángulo como el radio de la misma rutina. –