erweiterte Näherung zu Pythagoras
Verfasst: 02.05.2025 16:38
... der Pythagoras läßt mich einfach nicht los!
In meinen langen Erläuterungen und Versuchen einen schönen Raycaster auf dem A8 zu bauen (ich denke das Projekt werde ich wieder im Herbst aufnehmen), bin ich zwingend abhängig auf die Berechnungen von Entfernungen. In Assembler ist das gar nicht so einfach, denn quadrieren und Wurzel ziehen bedarf besonderer Routinen (die ich ja später hier alle hergeleitet habe). Diese Routinen existierten damals so nicht und ich war auf eine ganz gute Näherung angewiesen, die ich dann auch im Netz finden konnte - in den 50 igern und 60 igern gerade bei den einfachen Rechnern waren diese Näherungen notwendig und einige Mathematiker echt erfinderisch.
Die Näherung für c^2 = a^2+b^2 also c = sqrt (a^2+b^2) ist ja:
c = a+b/2 für a>b
Die Näherung ist echt gut und super schnell. Leider ist die an bestimmten Stellen fehlerhaft. Diesen Fehler kann man aber ganz gut ausgleichen:
Tendenziell ist die Näherung immer zu groß. Wenn man jetzt aber vom Ergebnis c die erste Stelle von a+1 subtrahiert solange b>10 ist, dann ist das Ergebnis wirklich nahezu perfekt.
Beispiel: a=40 , b=30 --> c=40-5+30/2 = 50 (mathematisch 50)
Beispiel: a=35 , b=25 --> c=35-4+25/2 = 43 (mathematisch 43)
Beispiel: a=72, b=62 --> c=72-8+62/2 = 95 (mathematisch 95)
In meinen langen Erläuterungen und Versuchen einen schönen Raycaster auf dem A8 zu bauen (ich denke das Projekt werde ich wieder im Herbst aufnehmen), bin ich zwingend abhängig auf die Berechnungen von Entfernungen. In Assembler ist das gar nicht so einfach, denn quadrieren und Wurzel ziehen bedarf besonderer Routinen (die ich ja später hier alle hergeleitet habe). Diese Routinen existierten damals so nicht und ich war auf eine ganz gute Näherung angewiesen, die ich dann auch im Netz finden konnte - in den 50 igern und 60 igern gerade bei den einfachen Rechnern waren diese Näherungen notwendig und einige Mathematiker echt erfinderisch.
Die Näherung für c^2 = a^2+b^2 also c = sqrt (a^2+b^2) ist ja:
c = a+b/2 für a>b
Die Näherung ist echt gut und super schnell. Leider ist die an bestimmten Stellen fehlerhaft. Diesen Fehler kann man aber ganz gut ausgleichen:
Tendenziell ist die Näherung immer zu groß. Wenn man jetzt aber vom Ergebnis c die erste Stelle von a+1 subtrahiert solange b>10 ist, dann ist das Ergebnis wirklich nahezu perfekt.
Beispiel: a=40 , b=30 --> c=40-5+30/2 = 50 (mathematisch 50)
Beispiel: a=35 , b=25 --> c=35-4+25/2 = 43 (mathematisch 43)
Beispiel: a=72, b=62 --> c=72-8+62/2 = 95 (mathematisch 95)