CPU Fehler C++ Terminalausgabe

hell-student

Lieutenant
Registriert
Nov. 2007
Beiträge
671
Hallo Zusammen,

Ich sitz grad an meiner Studienarbeit und muss da ein paar Berechnungen machen. Habe dabei mit der Eigen-Bibliothek gearbeitet und nun ergibt sich bei einfachen Berechnungen folgender Fehler:

Code:
Vector3d target(400,110,0);
Vector3d e1(target.x(), target.y(), target.z());
e1.x() -= s1.x();
e1.y() -= s1.y();

s1.y() = 110.

Ausgabe:

0
-1.421e-14

Also irgendwie scheint er nicht 110 von 110 abziehen zu können. System siehe Sig. Compiler ist g++. BS: Kubuntu 11.04

Übertaktet wurde zwar, doch alles im grünen Bereich. Temps stimmen auch unter Linux. Eigentlich bleibt er immer nur auf 1,6 Ghz.

Habe keine Ahnung warum dies nun so ist und verzweifel halber dran. Hab vorhin auch noch andere komische Phänomene gesehen, das auskommentierte Terminalausgabe plötzlich das Ergebniss verändert.

Danke mal
 
Was geben die Funktionen x() und y() zurück? Sollten es keine Referenzen sein, so bin ich doch verwundert, dass du da nicht einmal eine Warnung vom Compiler bekommst.
 
Bist du sicher das alle Werte allokiert und ihnen vorallem ein Wert zu gewiesen wurde?
So zahlen mit um 10^-14 sehen eher nach allokiertem Speicher ohne zugewiesenen Wert aus.
Ansonten mal sämtliche Warnings des Compilers anschalten.
Oder check dein Programm mit valgrind. Achte auf fehlerhafte Speicherallokierungen, Speicherfreigaben und uninitialisierte Werte.
Anhand des Programmauszugs kann man nichts sagen...dazu müsstest du schreiben was die aufgerunfenen Funktionen / erzeugten Objekte tun
Mfg
 
Sorry mach ich doch alles gerne:

Also alle Werte sind initialisiert und .x() gibt die x-Komponente des Vektors (double) zurück.
Alles wurde gut überprüft. Compiler gibt keinerlei Fehlermeldung aus. Ich hab jetzt auch so grasse Sachen, dass, wenn ich eine Zeile auskommentiere, sich Ergebnisse von anderen unangetasteten Berechnungen ändern:

Wenn auskommentiert:
Code:
//cout << v1 << endl;

ist das Ergebniss von den anderen Ausgaben:

-7.76001e-312
5857.86

Wenn nicht auskommentiert, natürlich mehr Ausgabe, weils ein Vektor ist, aber:

0.001908 <-- Vektor
0.0004197 <-- Vektor
3.815e-06 <-- Vektor
0 <------- ??????? Warum nicht wie oben -7.76001e-312
5858

Also langsam raff ich gar nichts mehr. Ich lass mal valgrind drüber laufen. Aber alle Werte sind korrekt initialisiert und keinerlei Pointer etec drinne. Dachte es gehört hier ins Forum, da ich irgendwie schiss hab, es würd an der CPU liegen. 4,2 Ghz bei normaler Spannung dürfte der CPU nichts gemacht haben und momentan läuft diese ja auch nur auf 3,5-3,6 Ghz.
 
Läuft den alles andere normal ?

Normale Rechenaufgaben geben richtige Werte aus ?
 
Wenn du wirklich double zurückgibst (keine Referenz auf double) so ist dein Code einfach nur Schwachsinn.

Siehe z.B. folgende Zeile:
Code:
s1.y() = 110.
Ich bin sogar verwundert, dass hier keine Compiler-Warning bzw. sogar Fehler fliegt (und das nicht einmal wegen des Punktes statt des Strichpunktes, ist wohl wirklich nur ein Schreibfehler). Du versuchst hier, einer Funktion einen Wert zuzuweisen - das kann nicht funktionieren. "Echte" Compiler (Sorry, aber ich bin kein Fan vom gcc) werfen hier z.B. "error C2106: '=' : left operand must be l-value".

Folgende Zeile macht aus dem gleichen Grund ebenso keinen Sinn:
Code:
e1.y() -= s1.y();
 
Daher meine Frage, ob wirklich alles allokiert ist.
Wenn nur double zurückgegeben wird kann das einfach nicht funktionieren wie Simpson474 schon schrieb.
Was gibt denn cout <<s1.y()<<endl; zurück?
Ansonten wäre s1.y(100) vielleicht sinnvoller, wenn es die entsprechende Funktion gibt.
Nicht immer so auf dem gcc rumhacken ;)
 
Eigen supports the following syntaxes for read and write coefficient access:

matrix(i,j);
vector(i)
vector
vector.x() // first coefficient
vector.y() // second coefficient
vector.z() // third coefficient
vector.w() // fourth coefficient


So ich ich das nun sehe kann ich sowol mit .x() schreibend, als auch lesend zugreifen. Normale Operationen gehn eigentlich schon
 
Naja dafür musst du dir die Dokumentation der Library gscheit durchlesen und ned nur den Teil.
Ansonsten kann ich mich den Vorrednern nur anschließen.
 
Zurück
Oben