Seite 1 von 3

Rechnen

Verfasst: 05.04.2005 13:07
von Konne
Ist es möglich in einer long Variable die ausgerechnete Zahl "16000000 hoch 786432" zu schreiben?

Wenn neun wie kann ich die Zahl ausrechen und auf dem Bildschirm wiedergeben?

Verfasst: 05.04.2005 14:28
von Laurin
Die Zahl ist für Longs zu groß. Selbst der Windows-Taschenrechner streikt dabei.

Code: Alles auswählen

var.f = Pow(16000000, 786432)
Debug var.f
var.f = 1.#INF00 :lol: unendlich!

Wozu brauchst du so eine große Zahl?

Verfasst: 05.04.2005 14:47
von Ynnus
Dir ist klar, dass allein 16.000.000^999 schon mehr als 7196 Stellen hat?
Deine Rechnung würde diese Zahl noch um ein vielfaches an Stellen erweitern. Wozu benötigst du bitte eine Zahl welche man nicht einmal ansatzweise aussprechen könnte?

PureBasic-Long-Variablen (Vorzeichenbehaftet, also praktisch 31 bit) fassen maximal den Wert von 2^31. Es sollte einsichtig sein, dass die somit maximalen 10 Stellen nicht einmal im Ansatz fähig wären, die 7196 Stellen einer 16.000.000^999 Rechnung zu fassen. ;)

Verfasst: 05.04.2005 16:21
von Froggerprogger
Da 10^7 < 16000000 < 10^8 hat diese Zahl wegen (10^7)^786432 = 10^5505024 < (10^8 )^765432 = 10^6291456 also irgendwas zwischen 5505024 und 6291456 Stellen.

Man kann mit z.B. Java zwar solch riesige Zahlen berechnen, jedoch dauert das dermaßen lange, dass es Sinn macht, zuvor etwas Gehirnschmalz zu investieren, um die Berechnung abzukürzen:

Die Berechnung läßt sich etwas vereinfachen:
a) Wegen 16000000 = 16*10^6 läßt sich der zu berechnende Wert auseinanderziehen zu 16^786432 * (10^6)^786432 = 16^786432 * 10^4718592.
=> Die gesuchte Zahl ist also in Dezimaldarstellung 16^786432 gefolgt von genau 4718592 Nullen. Letztere braucht man also während der Berechnung nicht zu beachten, da sie zudem nur extrem viel Rechenzeit ziehen.

b) Da aber selbst die Berechnung von 16^786432 noch lange dauert, vereinfachen wir noch weiter:
Wegen 16 = 2^4 ist somit 16^786432 = 2^3145728.
Binär dargestellt ist 16^786432 also eine 1 gefolgt von 3145728 Nullen.
Somit läßt sich 16^786432 erzeugen durch eine 1, welche um 3145728 Stellen nach links geshiftet wird. Das Shiften geht nahezu ohne Zeitaufwand.

Insgesamt liefert somit folgendes Java-Programm die gesuchte Zahl ohne die folgenden Nullen:

Code: Alles auswählen

import java.math.*;
import java.io.*;

public class MegaZahl {
    public static void main (String [] args) throws IOException    
    {
        BigInteger x = BigInteger.valueOf(1);
        x = x.shiftLeft(3145728);

        System.out.println("value calculated. Write decimal value to file.");
        FileWriter f = new FileWriter(new File("C:\\MegaZahl.txt"));
        f.write(x.toString());
        System.out.println("value written to file. End");
        f.close();
    }
}
Das Wandeln der Zahl in einen Dezimalzahl-String dauerte dabei etwa 15 Minuten und liefert folgende Zahl:
MegaZahl.txt (947kB)
... mit 946959 Stellen, an welche nun noch 4718592 Nullen angehängt werden müssen. Insgesamt hat die Zahl also 5665551 Stellen.

Für das Rechnen mit beliebig großen Zahlen gibt es glaube ich auch für PB eine Lib? Schau dafür mal auf Purearea.

Verfasst: 05.04.2005 18:40
von Konne
Danke für die Antworten die Zahl müsste übrigens meiner überlegung nach die mögliche Anzahl an verschiedenen Bildern sein die ein Bildschirm mit der Auflösung von 1024x768 und 16000000 Farben darstellen kann. Somit wäre dann jede DVD und alles andere was es je geben würde schon auf dem PC gespeichert und man müsste von nun an nur noch die Bilder hintereinander aufrufen^^ :allright:

Verfasst: 05.04.2005 19:36
von Froggerprogger
... aber selbst wenn wir in jedem Atom ein Bit speichern könnten bräuchten wir unzählige Quinqilliarden Universen wie dem unseren, um diese Daten alle gleichzeitig zu speichern...

Ich hab mal gehört, dass Forscher in etwa von pi mal Daumen 10^87 Atomen im Universum ausgehen. :wink:

Verfasst: 05.04.2005 19:36
von Kaeru Gaman
lol rofl

beachte bitte, daß >90% der möglichen bilder chaotischer farb-müll ist...

... erstell doch gleich ein 26-dimensionales Array mit 256-bit indices...

darin kannst du das gesamte unversum speichern ;)

edit:

hab froggers post grad erst gelesen...

meins war davon unabhängig...

Verfasst: 05.04.2005 20:47
von zigapeda
Froggerprogger hat geschrieben:Ich hab mal gehört, dass Forscher in etwa von pi mal Daumen 10^87 Atomen im Universum ausgehen. :wink:
Ich glaube du hast da was falsch verstanden 10^87 Atome wäre ein bischen wenig. :allright:

Verfasst: 05.04.2005 21:21
von freedimension
zigapeda hat geschrieben:
Froggerprogger hat geschrieben:Ich hab mal gehört, dass Forscher in etwa von pi mal Daumen 10^87 Atomen im Universum ausgehen. :wink:
Ich glaube du hast da was falsch verstanden 10^87 Atome wäre ein bischen wenig. :allright:
Also mir erscheint ein 1 mit 87 Nullen als ausreichend groß um das glauben zu könne. Aber wenn du meinst ;)

Verfasst: 05.04.2005 21:25
von Kaeru Gaman
is doch egal, is eh nur die sogenannte 'vorherrschende lehrmeinung'.