honey_bunny Geschrieben 26. Mai 2004 Teilen Geschrieben 26. Mai 2004 Hallo, ich habe ein Problem mit dem float-Datentyp: Ich gebe -123.45 ein und spiltte diese Zahl in Vor- und Nachkommazahl, also: zahl_1 = 123 und zahl_2 = 0.45 Wenn ich diese beiden Zahlen zusammenrechne, habe ich 123.45. Die eingegebene Zahl war aber negativ, daher rechne ich ergebnis = 0 - (zahl_1 + zahl_2); bzw. ergebnis = (zahl_1 + zahl_2) * (-1.0); In beiden Fällen bekomme ich als Ergebnis: -123.4499992 Was soll das denn? Kann mir jemand helfen? Oder hat jemand eine tolle Idee wie man einen String (char) in float umwandelt, ohne die Standard-Funktion atof verwendet? Danke schonmal! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 26. Mai 2004 Teilen Geschrieben 26. Mai 2004 Also es gibt schon Rundungsfehler bei Gleitkommaberechnungen, allerdings nicht bei so wenig Stellen. Zeig mal wie du das machst. Bei funktioniert es folgendermaßen ohne Fehler #include <stdio.h> int main() { float i=123, o=0.45, t=0; t= 0 - i - o; printf("%f\n",t); return 0; } [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
honey_bunny Geschrieben 26. Mai 2004 Autor Teilen Geschrieben 26. Mai 2004 Ich hab das quasi genauso. Aber irgendwie klappt das nicht... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 26. Mai 2004 Teilen Geschrieben 26. Mai 2004 Naja quasi könnte ja schon DER Unterschied sein Hast du alle Variablen als float deklariert? Was passiert wenn du stattdessen double nimmst? Was wird bei dir ausgegeben wenn du mein Programm übersetzt? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
honey_bunny Geschrieben 26. Mai 2004 Autor Teilen Geschrieben 26. Mai 2004 1. Ja, alles float! 2. Mit double funktioniert alles wunderbar... 3. Dein Programm funktioniert auch wunderbar... Das einzige Problem ist jetzt, dass meine Aufgabe folgende war: Umwandlung eines Strings in float ohne atof... jetzt hab ich aber nen double :-( Noch ne Idee??? (Danke schonmal!!!) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 26. Mai 2004 Teilen Geschrieben 26. Mai 2004 Hallo, Also es gibt schon Rundungsfehler bei Gleitkommaberechnungen, allerdings nicht bei so wenig Stellen. Doch, auch dann. Das Problem tritt auf, wenn es für eine Floating-Point Zahl keine Eindeutige Repräsentation auf Maschinenebene gibt. In der Regel ist das dann der Fall, wenn sich eine Fliesskommazahl nicht als Summe von Zweierpotenzen bzw. 1/Zweierpotenzen (für den Nachkommateil) darstellen läßt bzw. die Annäherung ausreichend genau ist. Im oben genannten Fall trifft das für die Zahl 0.45 zu (bzw. auf 0.2, da 0.25 eindeutig repräsentiert werden kann). Das kann man auch leicht per Hand ausprobieren, in dem man versucht, 0.45 (Mantisse) aus Elementen der folgenden Serie zu berechnen 0.50000 + 0.25000 + 0.12500 + 0.06250 + 0.03125 usw. Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. Mai 2004 Teilen Geschrieben 26. Mai 2004 Das kann man auch leicht per Hand ausprobieren, in dem man versucht, 0.45 (Mantisse) aus Elementen der folgenden Serie zu berechnen Alternativ kann man die Zahl auch als Bruch darstellen: 0.45 = 45/100 = 9/20. Nur wenn der Nenner eine Potenz von 2 ist, lässt sich die Zahl als float/double ohne Fehler speichern. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 26. Mai 2004 Teilen Geschrieben 26. Mai 2004 Oh, cool wußte bisher nicht woher die Rundungsfehler kommen:) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 26. Mai 2004 Teilen Geschrieben 26. Mai 2004 Hallo, eine etwas ausführlichere Beschreibung findest Du hier: http://www.nuvisionmiami.com/books/asm/workbook/floating_tut.htm http://research.microsoft.com/~hollasch/cgindex/coding/ieeefloat.html Nic 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.