Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 19-08-2003, 14:53   #1 (permalink)
...
 
Registriert seit: Oct 2002
Ort: Nürnberg
Beiträge: 3.611
[Math.round] Bug?

ActionScript:
  1. Number.prototype.afertComm = function() {
  2.     var t = this-Math.round(this);
  3.     return t;
  4. };
  5. zahl = 392.39201;
  6. trace(zahl.afertComm()); // 0.392010000000028
  7.  
thorben.schmitt ist offline   Mit Zitat antworten
Alt 19-08-2003, 14:57   #2 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Floatnumbers in Flash. Such mal danach.

Gleiche wie zb: trace ( Math.sin( Math.PI ) )

oder auch:

trace ( 392.39201 % 1 )
trace ( 392.39201 % 392 )

:o)
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com

Geändert von Andre' Michelle (19-08-2003 um 14:58 Uhr)
André Michelle ist offline   Mit Zitat antworten
Alt 19-08-2003, 15:23   #3 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Zürich
Beiträge: 1.776
interessant. ich dachte immer, dass die floating-point-toleranzen daher kämen, dass intere rundungsfehler auftreten, die aber bei addition oder subtraktion dann keine rolle spielen.
was ich dann bemerkenswert finde, ist, dass jedenfalls
trace (392.39201-392.39201);
richtig ausgewertet wird...

ActionScript:
  1. Number.prototype.afertComm = function() {
  2.         var t = this-Math.round(this);
  3.         //trace (Math.round(this));
  4.         //trace (this);
  5.         return t;
  6. };
  7. zahl = 392.39201;
  8. //trace (zahl-Math.round(zahl));
  9. trace (392.39201-392);
  10. trace (392.39201-392.39201);
  11. //trace(zahl.afertComm());
  12. //trace ( 392.39201 % 1 )
  13. //trace ( 392.39201 % 392 )
  14.  
fresh ist offline   Mit Zitat antworten
Alt 19-08-2003, 15:28   #4 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Letztendlich wird jede Zahl in Flash als 64Bit Float umgerechnet.
Dabei passieren Rundungsfehler, die Rechnenoperation als solches ist egal.

trace (392.39201-392.39201);

wird aber offensichtlich anders behandelt.
Generell macht das schon der Compiler, soweit ich weiss.
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 19-08-2003, 15:44   #5 (permalink)
...
 
Registriert seit: Oct 2002
Ort: Nürnberg
Beiträge: 3.611
danke andre' für die erklärung

ps: trace (392.39201-392.39202);
thorben.schmitt ist offline   Mit Zitat antworten
Alt 19-08-2003, 16:08   #6 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Sehr schönes Beispiel Thorben. Wenn wir davon ausgehen, dass dieser Wert vom Compiler berechnet wird, sieht man daran, dass das Problem mitnichten flashspezifisch ist, sondern auch in normalen Exen auftritt. Es ist einfach ein Fakt, dass Fliesskommazahlen auf Computern nicht genau sind.

Davon abgesehen kannst du die Zahlen hinter dem Komma mit mod 1 herausbekommen.

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 19-08-2003, 16:14   #7 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Zürich
Beiträge: 1.776
@bokel:
aber hallo!
andre michelle hat's ja schon gepostet:

trace ( 392.39201 % 1 );

edit: entschuldigung!
du wolltest wahrscheinlich nur sagen, dass sich der aufwand mit der funktion nicht lohnt...

Geändert von fresh (19-08-2003 um 16:16 Uhr)
fresh ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele