XIRR funktion: Verbesserung geht nicht



  • Hallo Zusammen,
    Ich versuche eine Verbesserung von einer C++ implementierung der XIRR (funktion aus dem Finanzbereich).

    Funktionserklärung: xirr = getXirr(Values, Dates, fRate)
    Values: sind Werte
    Dates: Datumswerte
    fRate: Schätzungswert (-1<fRate<1)
    Der Schätzungswert wird in ein Newton algorithmus verwendet um xirr zu berechnen.
    Die bisherige implementierung gibt einen Fehler zurück wenn der vom user eingegebe fRate zu keiner Lösung (xirr) führt.

    Die Verbesserungidee:
    das Programm soll zuerst nach einer Lösung suchen unter Verwendung des Userwertes oder ein default Wert von 0.1.
    Falls dieser zu keiner Lösung führt dann wird der Bereich von -0.99 bis 0.99 in 0.01 Schritte gesacannt um ein Schätzungswert zu finden der zu einer Lösung führt.

    Leider klappt meiner bisherige Implementierung nicht. Mein Verdacht ist dass die äusser while-schleife nur einmal durchlaufen wird. Ich kann leider nicht herausfinden wo der hacken im meinem Code liegt.
    kann Jemand mit da helfen? wo habe ich was übersehen? Hier ist der Code (der basiert auf die Implementierung in Openoffice)


  • Mod

    dreisson schrieb:

    Mein Verdacht ist dass die äusser while-schleife nur einmal durchlaufen wird. Ich kann leider nicht herausfinden wo der hacken im meinem Code liegt.

    Wie kann das ein Verdacht sein? Prüf das doch einfach nach im Debugger!



  • sorry nicht gut ausgedrückt!
    ist nicht verdacht ich habe es geprüft!
    Ich habe Values Dates und fRates so ausgewählt dass die äussere schleife mehr als 1 mal durchlaufen wird. Aber ich kann nicht herausfinden woran es liegt, dass sie nur 1mal durchlaufen wird 😕



  • dreisson schrieb:

    sorry nicht gut ausgedrückt!
    ist nicht verdacht ich habe es geprüft!
    Ich habe Values Dates und fRates so ausgewählt dass die äussere schleife mehr als 1 mal durchlaufen wird.

    Gut.

    dreisson schrieb:

    Aber ich kann nicht herausfinden woran es liegt, dass sie nur 1mal durchlaufen wird 😕

    Step die Schleife doch einfach Zeile für Zeile im Debugger durch, dann siehst du warum sie nur 1x durchlaufen wird.
    Also Step, Variablen angucken.
    Nächster Step, wieder Variablen angucken.
    Usw.
    Dann solltest du schnell feststellen können in welcher Zeile der Fehler passiert, also wo welche Variable nen Wert bekommt den sie nicht bekommen sollte.
    Oder wo die Bedingung falsch gesetzt ist, weil er trotz passender Variablen Werte die falsche Verzweigung nimmt (falscher if-Ast, Schleifenabbruch wo die Schleife weiterlaufen sollte etc.).


Anmelden zum Antworten