Signifikamte stellen C Programmieren?

2 Antworten

Das sind die Freuden der Verwendung von floating point. Mit floats hast du nur eingeschränkte, endliche Präzision, und bei deren Verwendung wirst du dies immer berücksichtigen wollen. Insbesondere bei Operationen, die vollständige Präzision erfordern, wie z.B. Vergleiche - wie du ja selbst schon festgestellt hast.

Ein Weg der Vermeidung ist, soweit möglich, Zahlen, die vollständige Präzision erfordern, als Integers darzustellen. Kannst du floats nicht vermeiden, kannst du dafür den Wertebereich des Vergleichswert verschieben, also z.B. nicht gegen 0 zu vergleichen, sondern gegen einen Wert, der die zulässige Abweichung kompensiert, z.b. gegen 0.00005 - eine Möglichkeit für größer/kleiner als Vergleiche. Für Test auf Identität geht dies aber auch nicht - Vergleichswerte voneinander subtrahieren, und den Absolutwert der Differenz gegen den maximal zulässigen Fehler vergleichen gänge da, genauso wie Skalieren beider Operanden und dann deren Integer-Wert auf Identität testen.

Auch fixed point statt floats (essentially Integers mit einem Komma an selbst eingesetzter Stelle) sind oft eine Möglichkeit, um floats zu vermeiden. Floats sind zwar bequem in der Verwendung, erfordern allerdings, dass du dir deren Unzulänglichkeiten bewusst bist, und diese, so nötig, auffängst.

Nein, das geht in C so nicht. In c++ könntesz du den Operator entsprechend überladen, das ist aber was anderes.

Im Grunde brauchst du das aber auch gar nicht, du könntest das Double einfach in einen int casten und darübrr deine If Abfrage legen.