exakten Wert anzeigen

TheWizardOfOz

Grünschnabel
Hi,
Kurz und knapp: Wie kann man in Javascript den exakten Wert einer großen Zahl anzeigen lassen? Also statt 1.23e+40 alle einzelnen Stellen der Zahl.
 
Der exakte Wert steht da doch schon?
Ob ich da jetzt den schönen Weg von 1.23 * 10^40 wähle, oder 12300000...000 hinschreibe...
 
Der exakte Wert ist das bei mir aber nicht, wenn ich nämlich die Zahl Modulo 1000 nehme müsste dann 0 rauskommen, tut es aber nicht.
 
Ok ich bin gerade ziemlich verwirrt. Ich versuche einfach nur den exakten Wert von 18^18 auszugeben, welcher 39346408075296537575424 ist.

Code:
Math.pow(18, 18) == 39346408075296537575424
ergibt true. Aber genau so ergibt auch
Code:
Math.pow(18, 18) == 39346408075296537500000
true, obwohl es falsch ist. Und wenn ich die letzten 3 Ziffern mit Modulo haben möchte
Code:
Math.pow(18, 18) % 1000
kommt 584 raus, was ebenfalls völlig falsch ist.

In meiner Verzweiflung hab ich das ganze mal in Java versucht, und das gibt mir bei
Code:
System.out.println((long) Math.pow(18, 18))
9223372036854775807 aus, warum auch immer.

Sind Java und Javascript vom Teufel besessen oder ist das irgend ein merkwürdiger Aprilscherz? Kann man überhaupt den exakten Wert von 18^18 anzeigen lassen ohne fremden Code einbinden zu müssen?
 
Das liegt daran, dass die Zahlen einfach zu groß sind um im Speicher abgelegt werden. Dementsprechend werden die Zahlen als Floating-Point gespeichert.
Code:
39346408075296537500000;
// wird zu ...
3.934640807529654e+22;

39346408075296537575424;
// wird zu ...
3.934640807529654e+22;

// und daraus folgt:
(3.934640807529654e+22 == 3.934640807529654e+22); // true
 
Wenn ich also eine große Zahl ohne Ungenauigkeiten speichern will reicht eine Variable nicht aus und ich muss mehrere verwenden (was sehr umständlich wäre)? Gibt keine Möglichkeit den Variablen einfach mehr Speicher zur Verfügung zu stellen?
 
Deine zweite Zahl sieht in Binärdarstellung wie folgt aus:
Code:
1000010101001111100100011010001011100100011100011011010001000000000000000000
Das sind 76 Bits und selbst die größten Datentypen für Zahlen haben nur 32 Bit. Du kannst also alternativ deine Zahl als Zeichenkette speichern oder eben partiell als Ganzzahlen. Anders geht es nicht (zumindest nicht mit Javascript).
 
Irgendwie find ich das ein bisschen armselig dass Javascript dazu nicht in der Lage ist und man es selbst machen muss.

Naja ich habs jetzt aufgeteilt, Danke für Hilfe ;)
 
Auch andere Hochsprachen wie C sind standardmäßig nicht in der Lage so große Zahlen so genau zu speichern. Das liegt einfach daran, wie die Daten im Arbeitsspeicher gespeichert werden. Eigentlich war die Ausnahme so gemeint, dass bestimmt Superrechner andere Speicherstrukturen haben, mit denen man dann wesentlich größere Zahlen genau verarbeiten kann. Javascript ist also in dieser Hinsicht nicht schwächer als jede andere Programmiersprache.
 

Neue Beiträge

Zurück