Überlauf eines long double?
-
Und was sagt dein Debugger zu dieser Variablen?
-
Ich komme mit dem dev-c++ debugger nicht zurecht. wie kann ich eine Variable beobachten und das Programm Zeile für Zeile ausführen?
-
ich also weis ja nicht genau was bei A B C für differenzen auftreten können, aber bin der Meinung das s*(s-a)(s-b)(s-c) auch negativ werden kann, aufgelöst sollte das so aussehen
s^4 + (s^3)*a + (s^2)*b*c + s*a*b*c - (s^3)*b - (s^3)*c - (s^2)*a*b -(s^2)*a*c
was zeigt das bei dem Minusteil das C mit höher ptonzierten S multipliziert wird, daraus folgt ein sehr großen c bei sehr kleinem a und b wird s durch die formel s=(a+b+c)/2; kleiner c und das um einiges. Daher kommen evtl falsch eingelesene wete rein oder der gleichen, weil bei einem dreieck (a,b,c) sollte das normal nicht auftreten. jeddoch lieben wir alle das programmieren weil dinge passieren die so nicht passieren sollten oder^^? Grundprinzipiel kann die formel negative werte ausgeben, ausser ich habe falsch aufgelöst und normal sollte sie aber bei seitenlänmgen a,b,c eines dreiecks immer positiv sein.
-
Dann solltest du den Wert vorher testen, bevor du die Wurzel ziehst, denn die Wurzel einer negativen Zahl ist nun mal nicht definiert und erzeugt bei Aufruf von sqrt() eine std::domain_error Ausnahme.
-
@oelsni
Nun verrat mir bitte mal wie bei einen Dreieck eine Seite sehr groß und die beiden anderen sehr klein sein sollen?
-
Ich habe das Beispielprogramm (siehe vorletzter post von mir) mit dem Debugger getestet. Der Debugger zeigt die long double Variable richtig an, sobald ich sie aber in die Datei schreibe, steht ein ganz anderer Wert in der Datei.
Weiß einer, wie ich das verhindern kann?
-
Wie schreibst du denn jetzt den Wert in die Datei (mittels fstream)?
Evtl. mußt du noch einige Formatierungsflags (fixed oder scientific) angeben?
-
Mein Programm sieht so aus:
long double i = 9.21369875421325665478; ofstream f1("Flächeninhalte.txt"); f1<<i<<endl;
-
Braunstein schrieb:
@oelsni
Nun verrat mir bitte mal wie bei einen Dreieck eine Seite sehr groß und die beiden anderen sehr klein sein sollen?krümmung des raums aufgrund von masse-singularitäten
vielleicht sind die berechnungen ja allesamt richtig. nur unser verstand ist zu klein, um dies zu begreifen

-
kann mir jemand erklären, wie man einen long double in einen string umwandelt? Oder gibt es einen anderen Weg, um einen double korrekt(!) in eine Datei zu schreiben? Ich komm mit meinem Programm and der Stelle echt nicht weiter.
-
Hast du auch in der richtigen datei nachgeschaut? Dein Code funktioniert bei mir ohne Probleme.
#include <iostream> #include <sstream> #include <iomanip> using namespace std; int main() { long double i = 9.21369875421325665478; stringstream f1; f1 << std::setprecision(15) << i << endl; //mehr als 15 Stellen sind auch bei long double nicht drin cout << f1.str() << endl;; return 0; }
-
Ich habe den Code ausprobiert, bei mir zeigt er eine ganz falsche Zahl am Bildschirm an (dasselbe Problem, wie vorher in der Datei). Woran kann das liegen (ich nutz Dev-C++)? Muss ich vielleict die IDE wechseln? Wenn ja, welche kostenlosen IDEs würdet ihr mir empfehlen?
-
An der IDE kann das eigentlich nicht liegen, höchstens an der verwendeten Stream-Bibliothek.
Dev-C++ ist allerdings sowieso veraltet und wird nicht mehr weiterentwickelt. Ich empfehle hier CodeBlocks (www.codeblocks.org). Am besten gleich das Paket mit dem MinGW. Dann noch nach der Installation einen aktuellen NightlyBuild drauf und schon sieht es gut aus.
-
vielen dank, werde es mal mit CodeBlocks versuchen.