Wert eines Arrays verändert sich ohne Veränderung
-
S und U sollen jeweils Arrays von Double-Arrays sein. Ich will also 0...t Arrays, die wiederum jeweils Länge (2^t) haben.
Da ich die Länge manuell eingegeben haben will, muss ich mir die dynamisch definieren.
Wäre cool wenn ihr mir schonmal sagen ob ich die richtig definiert habe.
Solange ich nur S definiere klappt auch alles aber, sobald ich U definiere ändern sich Wert in S.
Ich hänge euch unten mal den Output an, in dem man sieht, dass bevor ich U definiere alles stimmt, dann aber S[2][2] plötzlich verrückt spielt.Liebe Grüße
if (kind=="American") { double** S = new double*[t+1]; for(e=0; e<=t; e++){ S[e]= new double[2^e]; } S[0][0]=S0; if (art=="Call") { for (time=1; time<=t; time++) { for (a=0; a<pow(2.0,time); a++) { if (a % 2 == 0) { S[time][a]=S[time-1][a/2]*(1+u); } else S[time][a]=S[time-1][(a-1)/2]*(1+d); cout << "S" << t << a << ":" << S[t][a] << endl; } } double** U = new double*[t+1]; for(c=0; c<=t; c++){ U[c]= new double[2^c]; } cout << "Hallo" << endl; for (a=0; a < pow(2.0,t); a++) { cout << "S" << t << a << ":" << S[t][a] << endl; }Zinssatz: Up: Down: S0: Strike: Zeitschritte:0 0.2 -0.1 1 1 2
European oder American ?American
Call oder Put?Call
S20:0
S21:0
S20:1.44
S21:1.08
S22:1.08
S23:0.81
U wurde definiert
S20:1.44
S21:1.08
S22:2.2264e-308
S23:0.81
-
Nimm std::vector, std::array, Smartpointer oder was immer für ein Container aus der Standardbibliothek dir passend erscheint. Bei deiner jetzigen Methode, alles von Hand mit new zu machen, sind Fehler, im wahrsten Sinne des Wortes, vorprogrammiert.
-
Ist schwierig da den Fehler zu sehen weil ich gar nicht genau weiss, was du da machen moechtest. Aber hier mal ein par Tipps:
- Benutze keine rohen Arrays (das ist C), sonder benutze std::vector oder std::array
- Gib deinen Variabeln sinnvolle Namen.
- Wenn du "2^e" schreibst, dann ist das nicht "2 hoch e" in C++. Nutze die Funktion pow(..) aus <cmath>
-
Danke schonmal für die Tipps !
Das mit 2^e, etc. hab ich übersehen, klar das muss pow(2.0,e) heißen.
Ich glaub es liegt erstmal an dieser ganzen dynamischen Allokation.
Ich weiß da gar nicht genau was ich mache.Ich will eigentlich einen dynamisch allokierten 2-dimensionalen Vektor, also t+1 Vektoren (0...t), dessen jeweilige Länge unterschiedlich sind und zwar 2^t.
Es geht um das Binomialmodell (CRR-Modell) zum Errechnen von Optionspreisen.
-
LarsMaurath schrieb:
Ich will eigentlich einen dynamisch allokierten 2-dimensionalen Vektor, also t+1 Vektoren (0...t), dessen jeweilige Länge unterschiedlich sind und zwar 2^t.
Jetzt rate mal, was std::vector ist.
-
Dann nimmt std::vector. Damit kannst du wunderbar dynamische Arrays anlegen ohne new, delete und Pointer zu brauchen.
Hier ein Beispiel:
#include <iostream> #include <vector> using std::vector; int main() { int t; std::cin >> t; vector<vector<double> > table( t ); for ( size_t i = 0; i < table.size(); ++i ) table[i] = vector<double>( pow( 2.0, static_cast<double>(i) ) ); }Das sollte glaube ich in etwa ein 2D-Array geben wie du es moechtest.
-
Vielen, vielen Dank !
Funktioniert einwandfrei !
Kannst du mir noch sagen, warum ich hier nicht dynamisch Speicher frei machen muss ?
Ich dachte sobald mein benötigter Speicher von ner Variablen abhängt die noch nicht fest steht muss ich das benutzen ?
Vielen Dank !
-
LarsMaurath schrieb:
Vielen, vielen Dank !
Funktioniert einwandfrei !
Kannst du mir noch sagen, warum ich hier nicht dynamisch Speicher frei machen muss ?
Ich dachte sobald mein benötigter Speicher von ner Variablen abhängt die noch nicht fest steht muss ich das benutzen ?
Vielen Dank !Das macht der vector alles automatisch. delete brauchst du dann und nur dann, wenn du new benutzt hast. Das heißt, so gut wie nie. Und falls du denkst du brauchst doch einmal new, dann frag hier noch mal, denn höchstwahrscheinlich brauchst du es nicht.