Algo für Satz des Pythagoras gesucht

11/09/2009 - 09:36 von Markus Wichmann | Report spam
Hi all,

Um mal die Threads über (Pseudo-)Metamathematik ein bisschen
aufzulockern:

Ich bin gerade dabei, die C-Standardbibliothek nachzuprogrammieren. Ich
habe mit dem Mathe-Teil angefangen. Jedenfalls blickte mir da aus dem
Standard gestern folgende Funktion entgegen:

double hypot(double x, double y)
[...]
The hypot functions[1] return the square root of the sum of the squares
of x and y, without undue overflow or underflow.

OK. Der letzte Teilsatz bedeutet:
Sei |x| kleiner als die Wurzel des kleinsten positiven Wertes, der im
größten Datentyp darstellbar ist. Dann ist x^2 dummerweise gleich 0,
weil es zu einem underflow kommt. Und wenn |x| größer ist als die Wurzel
des größten darstellbaren Wertes, wird x^2 gegen "unendlich" gerundet.

So, nun suche ich einen Algorithmus, der auch in diesen Randfàllen noch
die Hypotenusenlànge eines rechtwinkligen Dreieckes mit den Katheten x
und y ausrechnen kann. Ideen?

BTW: Ein paar Seiten weiter sagt mir der Standard, dass ich noch die
Fehlerfunktion, ihr Komplement, die Gammafunktion und deren natürlichen
Logarithmus basteln darf. Da dachte ich an Taylor-Polynome. Ich kann
hier mithilfe meines Taschenrechners bis zu 69 Koeffizienten berechnen
und in eine Lookup-Table schreiben. Die Frage ist, ob ein
Taylor-Polynom 69. Grades genau genug für eine Fließkommazahl nach
IEEE-754-double extended minimum ist, oder ob ich doch irgendwas anderes
basteln sollte.

Tschö,
Markus

[1] Der Plural deshalb, weil auch noch eine Funktion hypotf und hypotl
existiert, deren einziger Unterschied darin besteht, für die Datentypen
float bzw. long double definiert zu sein. Aber bei der FPU, für die ich
schreibe, ist das eh egal, da wird intern immer mit "long double"
gerechnet und nur im Interface zum Speicher auf die anderen Datentypen
gerundet wird.
GUI - ein Hintergrundbild und zwölf XTerms

vim -c "exec \"norm iwHFG#NABGURE#IVZ#UNPXRE\"|%s/#/ /g|norm g??g~~"
 

Lesen sie die antworten

#1 Ingo Menger
11/09/2009 - 10:35 | Warnen spam
On 11 Sep., 09:36, Markus Wichmann wrote:
Hi all,

Um mal die Threads über (Pseudo-)Metamathematik ein bisschen
aufzulockern:

Ich bin gerade dabei, die C-Standardbibliothek nachzuprogrammieren. Ich
habe mit dem Mathe-Teil angefangen. Jedenfalls blickte mir da aus dem
Standard gestern folgende Funktion entgegen:

double hypot(double x, double y)
[...]
The hypot functions[1] return the square root of the sum of the squares
of x and y, without undue overflow or underflow.

OK. Der letzte Teilsatz bedeutet:
Sei |x| kleiner als die Wurzel des kleinsten positiven Wertes, der im
größten Datentyp darstellbar ist. Dann ist x^2 dummerweise gleich 0,
weil es zu einem underflow kommt.



Wenn dem so ist, dann kommt folgendes in Frage:
a) es handelt sich um ein extrem winziges Dreieck, d.h. auch y ist
sehr klein. Dann kannst du y und x mit einem genügend großen c
multiplizieren und somit die Hypothenuse h' eines àhnlichen Dreicks
berechnen, das Ergebnis ist dann h'/c.
Die Methode kannst du benutzen, solange (c*y)² darstellbar ist.
b) es handelt sich um ein extrem spitzes Dreieck, daß heißt, y ist so
groß, daß y²+x² selbst dann nichts anderes als y² ergeben würde, wenn
x² noch darstellbar wàre. In dem Fall ist aber das beste Ergebnis y
selbst, denn die vorige und nàchste darstellbare Zahl dürften auf alle
Fàlle weiter weg sein vom wahren Wert.

Ähnliche fragen