Zum Inhalt springen

float - Rundungsfehler?


honey_bunny

Empfohlene Beiträge

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!!!)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...