Re: Fehler in Berechnung Addition und Multiplikation von Zahlen



Hi,

ich benutzer Access 2003 um Reports zu generieren und muss dort natürlich auch mal etwas berechnen. Nur leider macht Access hier etwas nicht richtig.
Beispiel ist folgende Rechnung:

274.8 - (6 * 45.8)

Sollte eigendlich 0 rauskommen. Access gibt mir jedoch folgendes Ergebnis:

2,8421709430404E-14

2,8 * 10^-14 ist doch 0.

Hat jemand eine Ahnung warum das so ist und -- viel wichtiger -- wie ich das beheben kann??

Das ist so, weil man mit einer endlichen Anzahl Bit (sagen wir mal 32, z.B. bei Single) keine unendlich genaue Abbildung einer Zahl darstellen kann. Der unendlich große Wertebereich von +unendlich bis -unendlich wird erstmal durch den Datentyp eingegrenzt (Single: -3,402823E38 bis -1,401298E-45 und 1,401298E-45 bis 3,402823E38) Dieser Wertebereich wird dann in 2^32 diskrete "Punkte" zerlegt, die darstellbar sind.

Hast Du nun eine Zahl, die nicht exakt einen dieser diskreten Punkte trifft, muss sie gerundet werden. Das kann nun dazu führen, dass Deine 45.8 intern als 45.8000000000001 dargestellt werden muss. Durch die Multiplikation versechsfacht sich der Fehler und fällt dann auf.

1. Verwende Double anstatt Single

Das löst das Problem zwar nicht grundsätzlich, aber könnte im Einzelfall helfen.

2. Nachdenken

Wenn eine Ganzahl (0 Nachkommastellen) mit einer Zahl (1 Nachkommastellen) Multipliziert wird, kann das Ergebnis nur 1 Nachkommastellen haben. Also sollte ein

Round(<ErgebnisDeinerRechnung>, 1)

das gewünschte Ergebnis liefern.

Ansonsten sollte als Faustregel für den zweiten Rundungsparameter gelten:

Max(x, 1) * Max(y, 1)

mit

x = Anzahl Nachkommastellen erste Zahl
y = Anzahl Nachkommastellen zweite Zahl

..

HTH

Thomas

--
"Access? Damit arbeite ich nicht. Das ist doch nur ein abgespecktes Excel."
.



Relevant Pages

  • Re: Nachkommastellen ohne runden streichen
    ... Nachkommastellen. ... Du kannst mit Format bewusst 1 Nachkommastelle erzeugen und diese dann mit Left inkl Punkt abschneiden und danach wieder eine Zahl draus machen: ... Microsoft MVP Office Access ...
    (microsoft.public.de.access)
  • Re: Liste mit unendlich vielen Zahlen
    ... Unendlich in meinem Kopf miteinander. ... Beispiel der unendlich vielen Nachkommastellen zu verdeutlichen. ... Dann vergleiche ich eine Zahl mit endlich vielen Nachkommastellen ... dass diese endliche Anzahl wohl nicht einmal ...
    (de.sci.mathematik)
  • Re: Liste mit unendlich vielen Zahlen
    ... Für jeden Listeneintrag mit Index i, Anzahl der Vorkommastellen v ... Nachkommastellen, ist schlicht keine natürliche Zahl. ...
    (de.sci.mathematik)
  • Re: Liste mit unendlich vielen Zahlen
    ... Für jeden Listeneintrag mit Index i, Anzahl der Vorkommastellen v ... der Nachkommastellen, ist schlicht keine natürliche Zahl. ...
    (de.sci.mathematik)
  • Re: Datenbank-Design
    ... (Anzahl der ... Was würde im obigen Fall eine Zahl bringen? ... EPT: (Access Error Prevention Table) http://access.joposol.com/ ...
    (microsoft.public.de.access)