| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Linksaußen Registriert seit: Jun 2003 Ort: Essen
Beiträge: 552
| Rundungsfehler??
Sicher gab's schon einige Posts zu Rundungsfehlern, aber woher kommt denn sowas?? ActionScript:
__________________ Der Ball ist rund |
| | |
| | #2 (permalink) | |
| Level up Registriert seit: Jun 2001 Ort: Bocholt
Beiträge: 4.155
|
...nun das ist durchaus ein Rundungsfehler, allerdings einer für den Flash nix kann, um zu verstehen wie es zu diesem Fehler kommt ändere erst mal Deinen Code ein wenig: ActionScript:
Ausgabe: Zitat:
Gruß Alois
__________________ -Spuckt mir auf den Stuhl, ich will im Grünen sitzen- | |
| | |
| | #3 (permalink) |
| Linksaußen Registriert seit: Jun 2003 Ort: Essen
Beiträge: 552
|
ja, ich hatte auch schon diverse Rechenfehler-Threads gelesen, nur daß dies auch vorkommt, wenn ich nur einen Multiplikationsfaktor ausklammere hätte ich nicht gedacht!
__________________ Der Ball ist rund |
| | |
| | #5 (permalink) |
| Level up Registriert seit: Jun 2001 Ort: Bocholt
Beiträge: 4.155
|
Natürlich haben die Klammern damit zu tun!! Das System versucht natürlich den Fehler selbst zu verhindern, solange es nicht mit Fliesskommazahlen rechnen muss ist es ja auch kein Problem die Werte im Speicher zu halten, das ist allerdings vorbei, falls eine Fliesskommazahl mit der anderen addiert wird, die Berechnung findet intern natürlich binär statt, und Flisskommawerte müssen eventuell gerundet werden... ...wird die Fliesskommazahl allerdings direkt multipliziert, so kann der Fehler minimiert werden... ...im Beispiel: ActionScript:
__________________ -Spuckt mir auf den Stuhl, ich will im Grünen sitzen- Geändert von Alois (23-01-2006 um 16:56 Uhr) |
| | |
| | #6 (permalink) |
| Linksaußen Registriert seit: Jun 2003 Ort: Essen
Beiträge: 552
|
Dieser SCHH...Rundungsfehler macht mich noch waaaaahnisinnig!! wie kann es sein daß mir dieses Script: Code: won = -0.6
if ((won*10-Math.round(won*10)) == 0) {
cent = won/Math.abs(won)*0.1;
} else {
cent = won/Math.abs(won)*0.05;
}
trace(won+" "+cent+" "+(won*10-Math.round(won*10))); Code: -0.6 -0.05 -8.88178419700125e-16 Code: -1.4 -0.05 -1.77635683940025e-15 Vielleicht kennt jemand ja eine andere Lösung zu folgendem Problem: je nach dem, ob die var won eine zweite Stelle nach dem Komma hat (immer eine Fünf, es sind €uro-Angaben) soll die var cent 0.05 betragen oder eben 0.1 (in Abhängigkeit vom Vorzeichen von won) eigentlich funktioniert das Script oben. Leider kommen diese Fehler bei Werten von 0.6, 1.2, 1.4 vor.... Ich will eigentlich nur scha
__________________ Der Ball ist rund |
| | |
| | #7 (permalink) | |
| Level up Registriert seit: Jun 2001 Ort: Bocholt
Beiträge: 4.155
| Zitat:
In Deinem Fall scheint das Problem ja äusserst einfach abzufangen zu sein: ActionScript:
__________________ -Spuckt mir auf den Stuhl, ich will im Grünen sitzen- Geändert von Alois (08-02-2006 um 23:21 Uhr) | |
| | |
| | #8 (permalink) |
| Linksaußen Registriert seit: Jun 2003 Ort: Essen
Beiträge: 552
|
Du hast natürlich recht. Der Fehler steckt weiter oben im Programm. Die Variable won wird mir mit trace zwar als "0.6" ausgegeben, weicht in Wahrheit aber minimal davon ab. Was heißt Flash trifft keine Schuld?? Ich gebe hier niemandem die Schuld! Aber 6 durch 10 ist immer noch 0.6 und nicht 0.688178419700125e-16wrrf3545mrk4554! Die Frage ist, wie soll ich damit umgehen?? Da es nie sicher ist, wo genau der Fehler auftritt, müßte man alle Rechenoperationen absichern. Denn hinterher danach zu suchen, ist natürlich sehr mühsam. In meinem Beispiel habe ich die Variable won so korrigiert: Code: won = Math.round(won*100)/100; Am besten, man kommentiert solche "Korrigierungsschritte" immer mit einem Vermerk, damit klar ist, was da im Moment eigentlich gerechnet wird.
__________________ Der Ball ist rund Geändert von Fralle (09-02-2006 um 10:03 Uhr) |
| | |
| | #9 (permalink) | |
| Level up Registriert seit: Jun 2001 Ort: Bocholt
Beiträge: 4.155
|
...aus meinem link oben: Zitat:
Der Einzige der im diesem System anders kann ist der Entwickler.... und das bist in diesem Fall Du...und Du als Entwickler solltest wissen, daß solche Korrekturen manchmal nötig sind, dann wunderst Du dich auch nicht über eine solche Codezeilen. Und wenn Du unbedingt auf 30 Stellen hinter dem Komma genau rechnen musst (daß ist kann in der Physik durchaus mal vorkommen), dann kannst Du das auch mit dem Computer, allerdings nur wenn Du den Rechenfehler von vornherein mit in Dein Programm hineindenkst (sonst schiesst Du mit Deinem Satteliten den Pluto ab, statt ihn zu umkreisen).
__________________ -Spuckt mir auf den Stuhl, ich will im Grünen sitzen- | |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |