Zahlenproblem

manatwork

Mitglied
Hallo,

ich addiere in meinem Script große Zahlen miteinander und speichere diese in einem Array. Leider kommt es dabei vor, dass Flash diese Zahlen manchmal in Fließkommazahlen (zB 1.00000100000001e+15) umwandelt.

An einer weiteren Stelle muß ich jede Stelle dieser Zahl einzeln auswerten. Gibt es eine Möglichkeit die Zahlen sicher als ganze Zahlen in dem Array zu speichern, oder evtl. vor einer Auswertung in eine ganze Zahl zu wandeln?


ActionScript:
PHP:
z=Math.pow(10,15);
zz=z.toString();
trace(zz);


hier wird 1e+15 ausgegeben

Wäre sehr Dankbar für Hilfe, da ich dieses unbedingt für ein Projekt brauche...
DANKE!
 
Da mit Ganzzahlen, wozu ja Double gehört nur Zahlen bis 4'294'967'295 darstellen kann, ist es klar, dass Dir Dein Computer die Zahlen als Fliesskomma ausgibt, bei allem was grösser ist.

Mögliche Lösungsansätze wären zum Beispiel dass Du Dir die Zahlen in Strings umwandelst, und mit diesen Strings rechnest.

Ich meine damit, dass Du zwar Zahlen anzeigst, aber diese Zahlen sind eigentlich ASCII und Du musst diese dann Zeichen für Zeichen wieder umwandeln, und die Addition mit diesen einzelnen Werten vornehmen.
Ist zwar etwas umständlich, aber es funktioniert.

Ich hoffe ich hab mich verständlich ausgedrückt
 
Danke erst mal für deine Antwort!

Das Problem ist folgendes, am Anfang ist die Zahl ein String, wenn ich diese aber mit einem anderen String oder Zahl addieren will, muß ich die Strings vorher in Zahlen wandeln, sobald ich das gemacht habe, bekomme ich eine Fließkommazahl. Eine Möglichkeit wäre, jede Stelle von 2 Strings jeweils in eine Zahl zu wandeln, diese zu addieren und dann einen neuen String daraus zu erstellen. Das wäre in diesem Fall extrem Resourcenlastig, da es im Extremfall über 1200 Zeichen wären...

ich verstehe nicht, wenn ich mit der Funktion Number.toString() eine Zahl wandele, dann ist die Ausgabe "1e+15" etwas anderes als 10000...! In meinen Augen ist das ein Bug in Flash
 
Nein ich glaub das ist eben das Problem mit der grösse der Zahlen die dargestellt werden können, und das was Du da beschreibst mit den einzelnen ASCII in Zahlen umwandeln, was so Resourcenlastig sei, das ist das was ich oben beschreiben wollte.


Es geht leider nicht anders, weil 32 Bit sind 32 Bit, und mit diesen lässt sich nicht mehr als 4'294'967'295 darstellen.

deshalb wird im Fliesskommaakkumulator das ganze so dargestellt, dass auch grössere Zahlen gehen, aber eben nicht mehr mit der ganzen Genauigkeit der Stellen.
 
... was aber wie gesagt nicht an Flash liegt, sondern an deinem Computer - Programme die dir das Rechnen mit grösseren Zahlen suggerieren, arbeiten intern mit bitweisen Rechenoperationen - frag dich weiterhin ob du das Wort Fliesskomma schon mal im Zusammenhang mit der Rechenleistung einer CPU gehört hast, und dann sag noch mal, das das ein Fehler von Flash ist.

(Am C64 war die höchste Zahl mit der du [im Ernst] fehlerfrei rechnen konntest so irgendwas mit +-58.354(o.s.ä.))

Grüsse
B
 
@Basileus

Alles so weit gut was Du da erklärst, aber beim VC64 waren die grössten berechenbaren werte entweder

-32768 bis + 32767
0 bis 65535
was mit 16 Bit die grössten darstellbaren Zahlen sind


oder
bei den Fliesskomma-werten bin ich mir nicht mehr sicher wie viel, aber es war einiges mehr
ich bin nicht sicher, ob ne Fakultät von 37 oder 1x 10 e37 auf jeden Fall schon sehr viel, weil da hat das Teil eben mit nem 5 Byte grossen Fliesskomma akku gerechnet.

was schon ne riesen Zahl ist, aber nur auf eben 8 Stellen nach dem Komma, was nicht unbedingt so genau ist
 
Zuletzt bearbeitet:
...konnte mich da nicht mehr so genau erinnern (deswegen o.s.ä.), aber mit dem VC64 konnte man schon eine Menge Spass haben.....mit fehlerfrei meine ich natürlich ohne Rundung und mit rechnen die normalen Methoden...

Grüsse
B
 
Zurück