WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Software (http://www.wcm.at/forum/forumdisplay.php?f=5)
-   -   Excel 2003 Sp1 rechnet falsch (http://www.wcm.at/forum/showthread.php?t=140862)

Atlan 02.08.2004 16:36

Excel 2003 Sp1 rechnet falsch
 
Hi Leute

Ich habe ein Problem mit Excel, oder besser gesagt Excel rechnet falsch.

In meinem Beispiel möchte ich, das pro Zeile eine Zelle um einen Bestimmten Wert erhöt wird.
Also in der ersten Zelle (A1) steht die Schrittweite, in der Zelle A3 steht der Startwert.
In der Zelle A5 wird zum Startwert (A3) die Schrittweite (A1) hinzugezählt.
In der Zelle A6 wird zum A5 Wert die Schrittweite (A1) hinzugezählt.
In der Zelle A7 wird zum A6 Wert die Schrittweite (A1) hinzugezählt.

In der B Spalte habe ich die gleichen Werte eingetragen wie sie in der A Spalte errechnet werden sollten.
In der C Spalte mach ich einen logischen Vergleich zwischen den beiden. WAHR = die Werte in A & B sind identisch. FALSCH dann sind sie nicht ident.

Ab Zeile 64 rechnet Excel jetzt falsch, wenn man die Zahl auf 14 Nachkommerstellen formatiert sieht man warum A & B nicht gleich sind.

http://public.mailfinanz.com/wcmforum/rechenfehler.jpg

die Excel Beispieldatei die oben abgebildet ist

Könnt ihr den Fehler nachvollziehen, oder habt ihr vielleicht eine Erklärung? Hab ich mathematisch was falsch gemacht?
Excel ist in der Version 2003 + SP1 aktualisiert.

Mein eigentliches Problem liegt um VBA bei durchlaufen einer Schleife im Wert des Schleifenzählers. Da dieser Fehler aber auch in einer Tabelle auftritt, habe ich ihn dort beschrieben, weil ich glaube das er so einfacher nachzuvollziehen ist.

thx Atlan

stz 02.08.2004 17:27

Excelfehler
 
Diesen Fehler kenne ích bereits von älteren Excel-Versionen (Excel 6). Er trat in einer Zeitabrechnungstabelle auf. Als Abhilfe habe ich die Rundungsfunktion verwendet.
M.f.G. Stz.

Preacher 02.08.2004 17:32

Excel rechnet nun mal nur mit endlicher Genauiglkeit (32Bit oder 64Bit FLOAT in dem Fall). Da ergeben sich mit der Zeit eben Fehler wie beschrieben.
Das ist nciht Excel-spezifisch sondern spezifisch für alle Programme, die mit dieser Genauigkeit rechnen.

maxb 02.08.2004 17:49

Das liegt daran, dass sich 0.1 dezimal, binär nur als

0.000110011001100110011001100110011001100110011001 10011001100110011001100110011001100110011001100110 0110011 ...

darstellen lässt. wennst nur mit endlich vielen binärstellen rechnest, dann hast unweigerlich mal einen fehler.

probiers mal mit 0.125
du wirst sehen, es klappt ohne fehler ;)


EDIT - siehe auch posting über meinen

Atlan 03.08.2004 17:17

thx Burschen, ihr habt 100%ig recht.

Ich habe soeben Excel zu einem Hausfrauenprogramm degradiert ;) da der Fehler auch bei den von Excel intern verwendeten Algorithmen auftritt (zb beim Auto-Reiheausfüllen).

ich hab jetzt eine Rundungsfunktion eingefügt in der ich auf 14 Stellen (Stellen, nicht Nachkommastellen) runde. Da Excel intern auf 15 Stellen rechnet und ich in jedem Schleifendurchlauf runde müsste das eigentlich reichen.

Die Schleife schaut jetzt so aus (und wird auch korrekt beendet)


Do While AktuellerWert <= EndWert
...
AktuellerWert = Round(AktuellerWert, 14 - Len(Round(AktuellerWert))) + SchrittWeite
...
Loop


Zitat:

Original geschrieben von maxb

EDIT - siehe auch posting über meinen

Welchen meinst du ?

maxb 03.08.2004 17:26

Zitat:

Original geschrieben von Preacher
Excel rechnet nun mal nur mit endlicher Genauiglkeit (32Bit oder 64Bit FLOAT in dem Fall). Da ergeben sich mit der Zeit eben Fehler wie beschrieben.
Das ist nciht Excel-spezifisch sondern spezifisch für alle Programme, die mit dieser Genauigkeit rechnen.


@Atlan - das hier. ist von der aussage her gleich mit meinem.


wir gesagt, das hat nicht unmitelbar etwas mit excel zu tun.

maxb 03.08.2004 17:40

Ein anderes Beispiel für's Excel ;)


A1=1.00000001


(A1^2 - 2*A1 + 1) = 0 -> WAHR

Dane 04.08.2004 13:39

Hab beim rumprobieren folgendes herausgefunden...
Wenn du auf Extras->Optionen gehst, dort den Reiter "Berechnung" und dann die Option-> "Genauigkeit wie angezeigt" aktivierst, dann funktioniert das Beispiel, wie beschreiben im ersten Post.

lg


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag