zu grosse zahl, speicherproblem....



  • Hi Leute,

    ich habe ein Problem bezueglich einer Zahl die durch eine Berechnung die ich durchführe erhalte...diese wird zu gross fuer einen double oder long double Wert...

    genaue Problem beschreibung:

    Ich führe eine Interpolation über eine Menge von eingelesenen Daten durch. Um diese Interpolation durch zuführen, müssen zu Beginn sogenannte Stützstellen berechnet werden. Diese Stützstellen werden aber durch die Menge der Daten so Gross, dass die Berechnung nicht mehr klar kommt. Hier die Berechnung:

    for (i=0; i< AnzahlWerte; i++)
    {
         a=1.0;
         for (j=0; j< AnzahlWerte; j++)
         {
            if (j !=i)
            {
               a = a * ( 1 / x[i] - x[j]);
            }
         }
    }
    

    da i extrem goss wird, wird a auch extrem gross....wie muss ich a nun declarieren???? oder gibt es ne Idee wie ich die Berechnung geschickt umformulieren kann damit ich mit vielen Werten rechnen kann??

    Thx!



  • Fehlt da ne Klammer?

    a = a * ( 1 / (x[i] - x[j]) );
    


  • und da fehlt auch noch nen doppelpunkt und klammer 🙂



  • an der Berechnung liegts nicht...sorry.

    ich hab die berechnung mit wenig werten durch geführt und kriege die korrekten Werte...nur wenn die liste der werte zu lang wird, wird das ergebnis verfälscht...


  • Mod

    Was ist denn a und was heißt "extrem groß" genau? Eine Multiplikation ist nämlich eigentlich eher unkritisch. Da müssten die Zahlen schon extrem groß werden, damit die nicht mehr funktioniert 🙂 .

    Strategie: Teilen und Herrschen. Multiplikation ist assoziativ. Du kannst daher erst Zwischenergebnisse berechnen, diese dann wieder miteinander multiplizieren. Da auf diese Weise Zahlen von ähnlicher Größenordnung miteinander multipliziert werden, ist dies numerisch günstiger, als eine extrem große Zahl mit einer Zahl nahe 1 zu multiplizieren. Bonuspunkte, da die Rechnung dadurch sogar trivial parallelisierbar wird.


Log in to reply