Fliesskommazahlen und Ungenauigkeiten

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Warf
Beiträge: 1913
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Fliesskommazahlen und Ungenauigkeiten

Beitrag von Warf »

Es ist kein Bug, das kommt aus der IEEE 754 Spezifikation: https://en.wikipedia.org/wiki/IEEE_754#Rounding_rules

Die Spezifikation sagt explizit:
"Round to nearest, ties to even" is the default for binary floating point and the recommended default for decimal. "Round to nearest, ties to away" is only required for decimal implementations
Da haben sich Ingeneure im Standardisierungsgremium schon was bei gedacht. Round to nearest even reduziert, wie ich oben beschrieben habe, den Rundungsfehler. Wenn das Ziel also ist möglichst korrekt zu rechnen (was in den meisten Situationen vermutlich der Fall ist), ist es die richtige Wahl.
Und das ist nunmal wie es auf der Hardware in der FPU verlötet ist. Programmiersprachen wie C oder JavaScript die ein eigenes Rundungsverhalten einbauen müssen das selbst implementieren, nicht nur auf Kosten der Genauigkeit sondern gleichzeitig auch mit geringerer Leistung.

Das Problem ist das in der Schule halt eine vereinfachte Form des Rundens beigebracht wird die einfach zu Merken für Kinder ist, aber leider falsch (bzw. falscher als gewollt) rechnet. Wenn man aber eine Maschine hat deren Ziel es ist so wenig falsch wie möglich zu rechnen, dann kann man da auch vernünftige Rundung einbauen.

Ich verstehe nicht was so schwer daran zu begreifen ist das man weniger Rechenfehler machen möchte. Wer rechnet gerne falsch?

Joh
Lazarusforum e. V.
Beiträge: 191
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: Fliesskommazahlen und Ungenauigkeiten

Beitrag von Joh »

Warf hat geschrieben:
Mo 8. Jan 2024, 19:59
Das Problem ist das in der Schule halt eine vereinfachte Form des Rundens beigebracht wird die einfach zu Merken für Kinder ist, aber leider falsch (bzw. falscher als gewollt) rechnet. Wenn man aber eine Maschine hat deren Ziel es ist so wenig falsch wie möglich zu rechnen, dann kann man da auch vernünftige Rundung einbauen.

Ich verstehe nicht was so schwer daran zu begreifen ist das man weniger Rechenfehler machen möchte. Wer rechnet gerne falsch?
Es mag ja sein, das der durchschnittliche Rundungsfehler besser wird.
Aber ich berechne nicht tausende von Artikeln mit Mehrwertsteuer und hätte dann den besten gerundeten Wert, sondern möchte, das meine Cents richtig abgerechnet werden und nicht auf die nächste gerade Zahl.

Ja ich weiß, das anderswo die einzelnen Cents abgeschafft werden.

Wenn jemand meint, seine Statistiken sind bei "nearest even" besser: ok, meinen Segen sollt ihr haben. Aber meine (Finanz-)Berechnungen sollen durchaus 99 ct ergeben können.
just my two Beer

Warf
Beiträge: 1913
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Fliesskommazahlen und Ungenauigkeiten

Beitrag von Warf »

Joh hat geschrieben:
Mo 8. Jan 2024, 20:24
Es mag ja sein, das der durchschnittliche Rundungsfehler besser wird.
Aber ich berechne nicht tausende von Artikeln mit Mehrwertsteuer und hätte dann den besten gerundeten Wert, sondern möchte, das meine Cents richtig abgerechnet werden und nicht auf die nächste gerade Zahl.
Selbst wenn du pro Kunde/Transaktion nur einmal rundest, wenn über die Laufzeit deiner Software du eine Millionen Kunden/Transaktionen bedienst, hast du über diese Lebenszeit hinweg trozdem tausende Euros zu viel genommen. Ich mein klar, von jedem einzelnen Kunden stiehlst du im durchschnitt nur einen zehntel cent, aber in summe läppert sich das schon.

Ich glaube zwar das es Rechtlich zumindest für kleiner Unternehmen keine konsequenzen gibt, aber wenn man seine bewusst so baut das sie im Durchschnitt 0,05 ct zu viel abrechnet (was der statistische Fehler ist) würde ich persönlich das als Betrug bezeichnen. Pro Individuum vielleicht klein, aber auf Masse kann man damit schon gut Geld machen

Die einzige Situation in der der Akkumulative Rundungsfehler nicht relevant ist, ist wenn deine Software nur ein einziges mal in ihrer ganzen Lebenszeit rundet. Also wenn deine Software nie benutzt wird ist egal das sie falsch rechnet

PascalDragon
Beiträge: 834
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Fliesskommazahlen und Ungenauigkeiten

Beitrag von PascalDragon »

Mathias hat geschrieben:
Mo 8. Jan 2024, 19:18
Ich habe immer mehr das Gefühl, das dies ein Bug von FPC ist. Vor allem weil man es nicht mal mit SetRoundMode() richtig umstellen kann.
Das funktioniert alles so wie es soll. Wenn du der Ansicht ist, dass es das nicht tut, dann werf bitte nicht einfach nur eine Aussage in den Raum, sondern bring bitte ein explizites Beispiel.
FPC Compiler Entwickler

Joh
Lazarusforum e. V.
Beiträge: 191
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: Fliesskommazahlen und Ungenauigkeiten

Beitrag von Joh »

PascalDragon hat geschrieben:
Do 11. Jan 2024, 23:19
Mathias hat geschrieben:
Mo 8. Jan 2024, 19:18
Ich habe immer mehr das Gefühl, das dies ein Bug von FPC ist. Vor allem weil man es nicht mal mit SetRoundMode() richtig umstellen kann.
Das funktioniert alles so wie es soll. Wenn du der Ansicht ist, dass es das nicht tut, dann werf bitte nicht einfach nur eine Aussage in den Raum, sondern bring bitte ein explizites Beispiel.
Na ja, ich finde es schon einen Bug, wenn ich den Roundmode umstelle um meine Finanzmathematischen Berechnungen korrekt zu berechnen und dabei bemerke, wie die Pixel sich auf dem Bildschirm bewegen.
Bei Linien, Objekten. Eventuell auch bei den Fonts, aber da mag sich mein Gedächtnis täuschen.

Wie eine Linie bei einem 45°-Winkel gezeichnet wird, mag ja durchaus andere Rundungswerte erfordern, als meine MwSt-Berechnungen.
just my two Beer

PascalDragon
Beiträge: 834
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Fliesskommazahlen und Ungenauigkeiten

Beitrag von PascalDragon »

Joh hat geschrieben:
Fr 12. Jan 2024, 00:07
PascalDragon hat geschrieben:
Do 11. Jan 2024, 23:19
Mathias hat geschrieben:
Mo 8. Jan 2024, 19:18
Ich habe immer mehr das Gefühl, das dies ein Bug von FPC ist. Vor allem weil man es nicht mal mit SetRoundMode() richtig umstellen kann.
Das funktioniert alles so wie es soll. Wenn du der Ansicht ist, dass es das nicht tut, dann werf bitte nicht einfach nur eine Aussage in den Raum, sondern bring bitte ein explizites Beispiel.
Na ja, ich finde es schon einen Bug, wenn ich den Roundmode umstelle um meine Finanzmathematischen Berechnungen korrekt zu berechnen und dabei bemerke, wie die Pixel sich auf dem Bildschirm bewegen.
Bei Linien, Objekten. Eventuell auch bei den Fonts, aber da mag sich mein Gedächtnis täuschen.

Wie eine Linie bei einem 45°-Winkel gezeichnet wird, mag ja durchaus andere Rundungswerte erfordern, als meine MwSt-Berechnungen.
Dann darfst du den Rundungsmodus eben nur für die Dauer deiner Berechnung umstellen. Oder führe die Berechnung in einem Thread durch, da der Rundungsmodus threadspezifisch ist.
FPC Compiler Entwickler

Mathias
Beiträge: 6209
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Fliesskommazahlen und Ungenauigkeiten

Beitrag von Mathias »

Na ja, ich finde es schon einen Bug, wenn ich den Roundmode umstelle um meine Finanzmathematischen Berechnungen korrekt zu berechnen und dabei bemerke, wie die Pixel sich auf dem Bildschirm bewegen.
Bei Linien, Objekten. Eventuell auch bei den Fonts, aber da mag sich mein Gedächtnis täuschen.
Und genau da wird auch wieder der liebe geldgierige Banker jammern, wen durch einen Rundungsfehler der Dezimalpunkt fehlt (Pixelfehler).
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1913
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Fliesskommazahlen und Ungenauigkeiten

Beitrag von Warf »

Mathias hat geschrieben:
Fr 12. Jan 2024, 17:16
Und genau da wird auch wieder der liebe geldgierige Banker jammern, wen durch einen Rundungsfehler der Dezimalpunkt fehlt (Pixelfehler).
Subpixelrendering mit dem man auch halbe Pixel rendern kann gibt es ja auch erst seit 30 Jahren (und Anti Aliasing seit 50). OpenGL und SDL können Subpixel bereits seit Jahrzehnten. Wenn man ein Problem mit Pixelsprüngen aufgrund von Rundungsfehlern hat, dann ist das kein Problem beim Runden, sondern das Problem ist das man eine inadequate Grafikbibliothek benutzt.

Das ist ein bisschen als würdest du dich beschweren das auf der Autobahn eine Mindestanforderung für Fahrzeuge von 60 km/h gibt, weil die Pferdekutsche die man hat deshalb nicht drauf dürfen. Das Problem ist nicht die Autobahn

Antworten