Hallo Zusianer & Delphianer,
warum liefert Delphi mit nachfolgendem Code als Ergebnis 0.0999999046325684 und nicht 0.1 wie jeder normale 1€-Taschenrechner?
Die Variable c wird später noch für if-Routinen verwendet, da hilft ein Schönformatieren mit FloatToStrF wenig.
Für einen Gedankenschubser wäre ich sehr dankbar!
..
procedure TForm1.Button53Click(Sender: TObject);
var
i: Integer;
Durchgang: Integer;
a: Single;
b: Single;
c: Single;
begin
a := 5.1;
b := 5;
c := a - b;
showmessage(FloatToStr(c));
..
end;
Gruß
Reinhard
Delphi 2005 Arbeiten mit Kommazahlen
-
- Beiträge: 113
- Registriert: 25.11.2009 22:28:07
- Aktuelle Projekte: Modul Herzebrock
- Wohnort: 33442 Herzebrock
- Johannes
- Beiträge: 3203
- Registriert: 14.03.2009 22:36:06
- Aktuelle Projekte: Zusitools (http://git.io/zusitools)
Re: Delphi 2005 Arbeiten mit Kommazahlen
https://de.wikipedia.org/wiki/Gleitkomm ... arithmetik" target="_blank
„Gleitkommazahlen warten besonders für den mathematischen Laien mit einigen Überraschungen auf, die auch oft das Ergebnis von Taschenrechner- und Computerrechnungen beeinflussen. Am wichtigsten sind außer Kraft gesetzte geläufige mathematische Rechenregeln. Wer intensiv mit einem Rechenhilfsmittel arbeitet, muss diese Eigenschaften kennen. Sie gehen auf die begrenzte Genauigkeit zurück, mit der Mantisse und Exponent gespeichert werden.“
Double statt Single zu verwenden wäre ein erster Schritt zu mehr Genauigkeit.
„Gleitkommazahlen warten besonders für den mathematischen Laien mit einigen Überraschungen auf, die auch oft das Ergebnis von Taschenrechner- und Computerrechnungen beeinflussen. Am wichtigsten sind außer Kraft gesetzte geläufige mathematische Rechenregeln. Wer intensiv mit einem Rechenhilfsmittel arbeitet, muss diese Eigenschaften kennen. Sie gehen auf die begrenzte Genauigkeit zurück, mit der Mantisse und Exponent gespeichert werden.“
Double statt Single zu verwenden wäre ein erster Schritt zu mehr Genauigkeit.
Zuletzt geändert von Johannes am 01.11.2020 10:46:38, insgesamt 1-mal geändert.
- Jens Haupert
- Beiträge: 4920
- Registriert: 23.03.2004 14:44:34
- Aktuelle Projekte: http://www.zusidisplay.de
- Wohnort: Berlin
- Kontaktdaten:
Re: Delphi 2005 Arbeiten mit Kommazahlen
Hallo,Johannes hat geschrieben:Double statt Single zu verwenden wäre ein erster Schritt zu mehr Genauigkeit.
bei dotnet wird dann das Ergebnis zu 0.099999999999999645. Das ist näher dran, hilft einem aber auch nicht weiter.
@Reinhard: Wenn man Fließkommazahlen ausgeben oder testen will, sollte man diese immer auf die gewünschte Nachkommastelle runden. Und in deinem Fall würde man noch besser den Abstand prüfen. Also z.B. if (Math.Abs(0.1 - c) < 0.1) oder so.
Grüße
Jens
Zuletzt geändert von Jens Haupert am 01.11.2020 10:56:36, insgesamt 3-mal geändert.
- Michael_Poschmann
- Beiträge: 19880
- Registriert: 05.11.2001 15:11:18
- Aktuelle Projekte: Modul Menden (Sauerland)
- Wohnort: Str.Km "1,6" der Oberen Ruhrtalbahn (DB-Str. 2550)
Re: Delphi 2005 Arbeiten mit Kommazahlen
Jens, alles eine Frage der inschinörmäßigen Abschätzung. Wie war das noch? "Pi ist gleich Drei, für genügend kleine Pi und große Drei."
Grüße aus dem Ungefähren
Michael
Grüße aus dem Ungefähren
Michael
-
- Beiträge: 113
- Registriert: 25.11.2009 22:28:07
- Aktuelle Projekte: Modul Herzebrock
- Wohnort: 33442 Herzebrock
Re: Delphi 2005 Arbeiten mit Kommazahlen
@ all : Danke für eure Beiträge
Da es sich später bei den Zahlen um Zusi-Koordinaten handelt, möchte ich vom Runden absehen. Ich will die Daten nicht unnötig verfälschen (Wenn auch nur sehr geringfügig).
Ich werde versuchen das Problem damit zu lösen, die Kommazahl (liegt als String vor) in eine Integer-Form zu zwingen, die ich dann ordentlich bearbeiten kann.
Gruß
Reinhard
Da es sich später bei den Zahlen um Zusi-Koordinaten handelt, möchte ich vom Runden absehen. Ich will die Daten nicht unnötig verfälschen (Wenn auch nur sehr geringfügig).
Ich werde versuchen das Problem damit zu lösen, die Kommazahl (liegt als String vor) in eine Integer-Form zu zwingen, die ich dann ordentlich bearbeiten kann.
Gruß
Reinhard