![]() |
![]() |
|
![]() |
![]() |
|
Software Rat & Tat bei Softwareproblemen |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Master
Registriert seit: 20.12.1999
Beiträge: 636
|
![]() 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. ![]() 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 |
![]() |
![]() |
![]() |
#2 |
Veteran
![]() Registriert seit: 22.10.2000
Beiträge: 353
|
![]() 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. |
![]() |
![]() |
![]() |
#3 |
Inventar
![]() |
![]() 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.
____________________________________
Bei Problemen zwei Griffe ranschweißen und aus dem Fenster ..... |
![]() |
![]() |
![]() |
#4 |
Großmeister
![]() |
![]() 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 |
![]() |
![]() |
![]() |
#5 | |
Master
Registriert seit: 20.12.1999
Beiträge: 636
|
![]() thx Burschen, ihr habt 100%ig recht.
Ich habe soeben Excel zu einem Hausfrauenprogramm degradiert ![]() 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:
|
|
![]() |
![]() |
![]() |
#6 | |
Großmeister
![]() |
![]() Zitat:
@Atlan - das hier. ist von der aussage her gleich mit meinem. wir gesagt, das hat nicht unmitelbar etwas mit excel zu tun. |
|
![]() |
![]() |
![]() |
#7 |
Großmeister
![]() |
![]() Ein anderes Beispiel für's Excel
![]() A1=1.00000001 (A1^2 - 2*A1 + 1) = 0 -> WAHR |
![]() |
![]() |
![]() |
#8 |
Master
![]() Registriert seit: 12.01.2002
Beiträge: 640
|
![]() 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 |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|