Rechnen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Rechnen

Beitrag 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?
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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?
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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. ;)
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag 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.
!UD2
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag 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:
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag 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:
!UD2
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Zuletzt geändert von Kaeru Gaman am 05.04.2005 21:04, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag 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:
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag 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 ;)
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

is doch egal, is eh nur die sogenannte 'vorherrschende lehrmeinung'.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten