2 Problemchen mit Funktionen



  • Hi, ich hab da mal ne Frage, genauer 2 Fragen.

    1. Gibts es eine mathematische Funktion OHNE 'Wenn-Dann', die, wenn die als Parameter gebenene Zahl negativ ist 0 zurückgibt, ansonsten die als Parameter gegebene Zahl.
      Ich dachte daran erst die Wurzel zu ziehen und dann wieder Potenzieren.
      Also:
    [e]fnof[/e](x)=((x)[h]0.5[/h])[h]2[/h]
    

    Aber das Wurzelziehen aus einer negativen Zahl ist nicht reell. =>Fehler 😞

    1. Ich habe eine LookUp-Tabelle entworfen, bei der der Wert für Arcus-Sinus(1.0) -1.#IND zurückgibt, die Funktion asinf(1.F) aus der C++ math Bibliothek gibt jedoch 1.5708 (der richtige Wert) zurück, ist auch richtig. 😕
      Was mache ich falsch?

    Danke schonmal im voraus.



  • Blaze schrieb:

    Hi, ich hab da mal ne Frage, genauer 2 Fragen.

    1. Gibts es eine mathematische Funktion OHNE 'Wenn-Dann', die, wenn die als Parameter gebenene Zahl negativ ist 0 zurückgibt, ansonsten die als Parameter gegebene Zahl.

    z.B. so gehts: f(x) = x*Θ(x) wobei Θ die Heaviside-Funktion meint.
    Ist nur die Frage, in wie weit man das als "Wenn-Dann" ansieht. Zumindest ist es eine mathematische Funktion. 😉



  • unter dem namen kannte ich die funktion nun noch nicht, aber der einheitssprung wäre auch mein vorschlage gewesen. wobei das ein bisschen geschummelt ist, da er eigentlich nur eine tarnung der wenn-dann-bedingung ist.



  • Zählt für dich abs als wenn-dann? Ansonsten könntest du doch sowas machen:
    f(x)=x+x2f(x) = \frac{x + |x|}{2}



  • abs kann man ja im Reellen durch quadrieren und anschließendes Wurzelziehen abbilden. Insofern kommt man ja so um die Fallunterscheidung herum.



  • womit wir wieder bei der lösung des OP wären: anstatt erst die wurzel zu ziehen und dann zu quadrieren, dreh es einfach um 😉

    ups, soll ja 0 werden. also doch wie 2 posts weiter oben 😃



  • Blaze schrieb:

    1. Ich habe eine LookUp-Tabelle entworfen, bei der der Wert für Arcus-Sinus(1.0) -1.#IND zurückgibt, die Funktion asinf(1.F) aus der C++ math Bibliothek gibt jedoch 1.5708 (der richtige Wert) zurück, ist auch richtig. 😕
      Was mache ich falsch?

    Du hast den falschen Wert in die Tabelle eingetragen (wie hast du sie denn aufgebaut?). Außerdem könnte es passieren, daß du gar nicht asin(1) berechnet hast, sondern asin(1.0000001) - und das ist tatsächlich undefiniert (Stichwort: Gleitkomma-Genauigkeit)



  • CStoll, du hattest vollkommen recht. Danke!
    Der Fehler lag darin, dass ich das mit den Wert 0 vergessen hatte, also anstatt insgesamt 2*1000 Elemente (Genauigkeit auf 3 Stellen, positiv und negativ) jetzt 2*1000+1

    Danke 🙂



  • hmm, wenn es dir um performance geht (bzgl Jump-Prediction etc), dann vielleicht auch so

    das höchstwertige Bit einer IEEE754-Gleitkommazahl f gibt das Vorzeichen an, also dann zB

    !bitmax * f

    😕


Anmelden zum Antworten