Ich möchte eine Hypot2-Berechnung auf einem 16-Bit-Prozessor tun.Wie Hypot2 (x, y) Berechnung, wenn Zahlen überlaufen können
Die Standardformel lautet c = sqrt((a * a) + (b * b))
. Das Problem dabei ist, dass es bei großen Eingaben überläuft. Z.B. 200 und 250, multipliziere 200 * 200, um 90.000 zu erhalten, was höher ist als der maximale signierte Wert von 32.767, so dass es überläuft, wie auch b, werden die Zahlen addiert und das Ergebnis kann ebenso nutzlos sein; es könnte sogar eine Fehlerbedingung wegen eines negativen sqrt signalisieren.
In meinem Fall habe ich mit 32-Bit-Zahlen zu tun, aber 32-Bit-Multiplikation auf meinem Prozessor ist sehr schnell, etwa 4 Zyklen. Ich benutze einen dsPIC Mikrocontroller. Ich möchte lieber nicht mit 64-Bit-Zahlen multiplizieren, weil das wertvolles Gedächtnis verschwendet und zweifellos langsamer sein wird. Außerdem habe ich nur sqrt für 32-Bit-Nummern, so dass 64-Bit-Nummern eine andere Funktion benötigen. Also, wie kann ich einen Hypot berechnen, wenn die Werte groß sein können?
Bitte beachten Sie, dass ich nur ganzzahlige Mathematik dafür verwenden kann. Die Verwendung von Fließkomma-Mathe führt zu einem Geschwindigkeitshit, den ich eher vermeiden möchte. Mein Prozessor hat eine schnelle Integer/Fixed-Point atan2-Routine, etwa 130 Zyklen; Könnte ich damit die Länge der Hypotenuse berechnen?
„Mein Prozessor eine schnelle integer/Fixpunkt atan2 Routine, etwa 130 Zyklen hat, konnte ich diese die Hypotenuse Länge berechnen“ dsPIC hat eine atan2 aber keine hypot ?! Ich bin vage vertraut mit PICs und ich bin überrascht, es zu hören. –
@Jason S es ist eine Fixpunkt Software-Routine. –
Könnten Sie einen Link zu ihrer Softwareroutine veröffentlichen? Wenn es CORDIC-bezogen ist, erhalten Sie sowohl den Winkel als auch den Radius aus derselben Routine heraus. –