bigpoint Geschrieben 18. Juli 2005 Teilen Geschrieben 18. Juli 2005 double dtest = 0.0 dtest = 10.000000000000000 + 13.690000000000000; [/PHP] im dtest steht 23.689999999999998 warum ??? und wie kann ich es beheben ?? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 18. Juli 2005 Teilen Geschrieben 18. Juli 2005 Das ist ein normaler Rundungsfehler. Guck mal hier Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 18. Juli 2005 Autor Teilen Geschrieben 18. Juli 2005 Das ist ein normaler Rundungsfehler. Guck mal hier also die Zahlen 10.000000000000000 und 13.690000000000000 sind CString die ich mit strtod in double umwandeln will/muss und zusamen adiren,leider kriege ich "normalen Rundungsfehler" wie kann ich vorgehen, dass ich den "normalen Rundungsfehler" umgehen bzw. beheben kann ??? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 18. Juli 2005 Teilen Geschrieben 18. Juli 2005 Versuch mal mit long double zu rechnen, das ist AFAIK der genauste simple Datentyp. Wenn das nicht reicht musst entweder eine Bibliothek suchen die beliebig lange Flieskommazahlen handeln kann oder den Rundungsfehler in Kauf nehmen und dein Programm entsprechend anpassen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 18. Juli 2005 Teilen Geschrieben 18. Juli 2005 wie kann ich vorgehen, dass ich den "normalen Rundungsfehler" umgehen bzw. beheben kann ???Geht es immer nur um zwei Nachkommastellen? Dann rechne gleich mit Hundertsteln und Ganzzahltypen, und benutz die Fließkommatypen nur für die Ausgabe, wenn überhaupt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 18. Juli 2005 Autor Teilen Geschrieben 18. Juli 2005 Versuch mal mit long double zu rechnen, das ist AFAIK der genauste simple Datentyp. Wenn das nicht reicht musst entweder eine Bibliothek suchen die beliebig lange Flieskommazahlen handeln kann oder den Rundungsfehler in Kauf nehmen und dein Programm entsprechend anpassen. Ja ich glaube das ich auch den Fehler im kauf nehmen muss, allerdings wie: Ich habe: Double gesamt = 23.690000000000000 Double gesamt1 = 23.689999999999998 Jetzt wenn ich die vergleichen will mit If (gesasmt != gesamt1) Rutsche ich in if Anweisung rein obwohl ich es nicht möchte Wie kann ich es lösen ?? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 18. Juli 2005 Teilen Geschrieben 18. Juli 2005 Das kannst du über einen Epsilonvergleich machen. Hier hab ich dazu mal ein Beispiel gepostet. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 18. Juli 2005 Teilen Geschrieben 18. Juli 2005 Wie kann ich es lösen ??Haben wir doch schon gesagt: Indem du keine Fließkommatypen benutzt. Es gibt nicht umsonst die Regel, dass man float & double nicht auf Gleichheit (oder Ungleichheit) prüfen soll. Ich frag ja gern nochmal: Geht es immer nur um zwei Nachkommastellen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 18. Juli 2005 Autor Teilen Geschrieben 18. Juli 2005 Geht es immer nur um zwei Nachkommastellen? Dann rechne gleich mit Hundertsteln und Ganzzahltypen, und benutz die Fließkommatypen nur für die Ausgabe, wenn überhaupt. ja aber wie kann ich eine Zahl die ich im CString als 23,21 in zB. Long speichern Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 18. Juli 2005 Teilen Geschrieben 18. Juli 2005 Indem du nicht 23,21 speicherst, sondern 2321. Du multiplizierst den double-Wert mit 100, addierst 0.5 (bzw. -0.5 bei negativen Zahlen), damit richtig gerundet wird, und weist das einer long-Variablen zu. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 18. Juli 2005 Autor Teilen Geschrieben 18. Juli 2005 Indem du nicht 23,21 speicherst, sondern 2321. Du multiplizierst den double-Wert mit 100, addierst 0.5 (bzw. -0.5 bei negativen Zahlen), damit richtig gerundet wird, und weist das einer long-Variablen zu. Ja das ist mir schon klar, aber ich speichere nichts, ich kriege den Betrag von Anwendung aus eben so Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 18. Juli 2005 Teilen Geschrieben 18. Juli 2005 ja aber wie kann ich eine Zahl die ich im CString als 23,21 in zB. Long speichern Ja das ist mir schon klar, aber ich speichere nichts, ich kriege den Betrag von Anwendung aus eben so Vielleicht könntest du das Problem noch mal genauer erklären. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 19. Juli 2005 Autor Teilen Geschrieben 19. Juli 2005 Erstmal Danke für Hilfe und Erklärung Das Problem habe ich gelöst, durch Fließkommatypen :eek Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.