![]() |
Berechnungsfehler
Hallo,
kann einen unschönen Berechnungsfehler beobachten. Habe folgende Variablen: Rohrzahl, Rohrlagen, RohrReihen, Kreisläufe: Integer RohreProKreis: Single Wenn nun Rohrlagen = 38, RohrReihen = 4 und Kreisläufe = 40, dann RohrZahl := RohrLagen * RohrReihen; RohreProKreis := RohrZahl / Kreisläufe: Ergebnis: RohreProKreis = 3,79999995231628 Wie kommt es dazu? Das korrekte Ergebnis wäre 3,8 Hat jemand von Euch eine Ahnung was zu dieser falschen Berechnung führt? Gruß Andreas |
AW: Berechnungsfehler
Das liegt am Datentyp Single (Float), der ist ungenau. Nimm stattdessen Extended.
|
AW: Berechnungsfehler
Zitat:
|
AW: Berechnungsfehler
Double geht auch!
Delphi Hilfe: Der Typ Extended bietet eine höhere Genauigkeit, ist aber nicht so einfach portierbar wie die anderen reellen Typen. Verwenden Sie Extended mit Bedacht, wenn Sie Datendateien anlegen, die gemeinsam und plattformübergreifend genutzt werden sollen. sollte man sich immer merken ;) |
AW: Berechnungsfehler
Zitat:
Grüße |
AW: Berechnungsfehler
Zitat:
![]() |
AW: Berechnungsfehler
Achtung: Im 64-Bit Modus gibt es Extended nur als Synonym für Double....
32-Bit kann genauer rechnen, als 64 Bit :-) (OK: Mit 64 Bit rechne *ich* ziemlich ungenau... :shock: :drunken:) |
AW: Berechnungsfehler
Wobei "Rundungsfehler" hier garnicht zu vermeiden sind, egal wie groß man den Fließkommadatentyp wählt.
Am Ende muß man ganz einfach bei der Ausgabe auf das gewünschte Maß runden und darf "niemals" mit = vergleichen. Currency "rundet" automatisch auf 4 Nachkommastellen. Bei BCD hängt das von der Speichergröße ab. (aber maximal mit der Auflösung vom Extended, wenn man es über die FPU berechnen lässt) PS: Bei 64 Bit ist Extended nur noch FPU-intern und steht dem Programmierer quasi außerhalb garnicht mehr zur Verfügung. In Delphi stand es halt unter 32 Bit nur deswegen zur Verfügung, weil es ging, aber offiziell war es nicht zur Benutzung angedacht. Drum kennen Andere sowas Großes garnicht erst. :stupid: ![]() Zitat:
|
AW: Berechnungsfehler
Hier noch mal auf deutsch:
![]() |
AW: Berechnungsfehler
DX35 kann dann bestimmt auch endlich 128 Bit. :stupid:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz