mikrocontroller.net

Forum: PC-Programmierung 9^9^9


Autor: Ricardo S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte es wohl möglich sein, irgendwie die Zahl 9^9^9 zu berechnen. Ich 
weiß, das ist eine verdammt große Zahl und das lässt sich nicht so 
einfach in Excel lösen, müsste deswegen programmiert werden. Kann man 
das vielleicht in Assembler machen?

Autor: Kai F. (k-ozz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der wohl einfachste Weg:

Start->Programme->Zubehör->Rechner:

Ergebnis: 1,9662705047555291361807590852691e+77

Autor: Roland Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
196627050475552913618075908526912116283103450944214766927315415537966391 
196809

Autor: Ricardo S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, aber das ...e+77 bedeutet doch, dass die Zahl 10^77 weitere Stellen 
hat, oder nicht? Und kann man das GENAU berechnen also bis auf die 
letzte Stelle?

Autor: dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum brauchst so eine zahl genau?

dieter

Autor: Ricardo S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Roland Schmidt
Wie hast Du das berechnet? Welches Programm? Das Ergebnis müsste 
wirklich viel, viel mehr Stellen haben.

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist da überhaupt definiert, was zuerst ausgewertet wird? 9^(9^9) 
oder (9^9)^9?

Autor: Ricardo S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So eine Zahl kann man nicht brauchen. Die Frage ist nur, wie kann man 
sie genau berechnen?

Autor: Roland Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit MAXIMA
zähl mal die Ziffern.

Autor: Bartli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab schnell n C Programm geschrieben:
#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("%d\n", 9^9^9);
    return 0;
}

Ausprobiert hab ichs nicht, aber das Dingens müsste 9 ausgeben, seh ich 
schon vom Schiff aus. Also nix mit 10 hoch 77 stellen :D

Autor: Schoasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Rolands Ergebnis sieht gar nicht mal so schlecht aus. Der TI 92plus 
spuckt bei mir das selbe aus.

Man darf nur nicht 9^9^9 eintippen sondern muss das ganze auf 2 mal 
machen.

mfg Schoasch

Autor: Ricardo S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann geht wohl Dein Programm net ;-)

Also

9^9 = 387420489

Dann ist 9^9^9

das selbe wie

9^387420489


und das ist sehr groß!

Autor: Bartli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dann geht wohl Dein Programm net ;-)

Oder Du kannst kein C.

Autor: Ricardo S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also mein Casio fx115ms sagt:

1,966270505 x 10^77

und das ist eben nicht genau.

Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na aber wie ist jetzt die Reihenfolge der Operatoren? 9^(9^9)
oder (9^9)^9?

Autor: Ricardo S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist doch egal, oder nicht?

Autor: Ricardo S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Bartli

Und schon ein Ergebnis mit Deinem tollen C Programm?

Autor: Tippgeber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Latürnich nicht: 9^(9^9)

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne Klammern ist der Ausdruck aber nicht definiert. Denn die 
Potenzfunktion ist nich assoziativ, i.A. gilt:
a^(b^c)!=(a^b)^c

Wenn du solche Zahlen genau berechnen willst dann nimm am besten ein CAS 
(Computer Algebra System) wie Maple, Mathcad, Mathematica oder so. Auch 
mit Matlab kannst du das berechnen.
Wenn du so etwas in einem Programm benötigst würde ich fertige Libraries 
wie zB die GNU multiple Precision Library verwenden, dann ist das ganze 
nämlich auch schon schön optimiert. Aber in Assembler würd ich sowas 
eher nicht versuchen ausser du benötigst das gut opimiert auch einem µC.

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, das ist nicht egal.
(9^9)^9 = 
196627050475552913618075908526912116283103450944214766927315415537966391 
196809

9^(9^9) ist hingegen deutlich größer. Das exakt auszurechnen dürfte 
schwierig werden. Der Zehner-Logarithmus von 9^(9^9) ist etwa 
3.6969309963157034*10^8, also hat diese Zahl fast 370 Millionen Stellen.

Autor: anonymous (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
9^9^9 = 9^(9*9) = 9^81

Autor: Ricardo S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mich hat einfach nur interessiert, ob die Zahl generell zu berechnen ist 
und ob so etwas auf einem schnellen Rechner (A64 3800 Dual Core) 
überhaupt in diesem Leben möglich ist und wie man das am besten 
anstellen könnte.

Ich denke ein uC ist wohl dazu zu langsam.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ricardo S. wrote:
> @Bartli
>
> Und schon ein Ergebnis mit Deinem tollen C Programm?


Oh.
Das C Programm ist korrekt und da kommt 9 raus.
Aber in C bedeutet ^ auch 'Exusiv Oder' und nicht
Exponentation.

> Ja, aber das ...e+77 bedeutet doch, dass die Zahl 10^77 weitere Stellen
> hat, oder nicht?

Nein. Es bedeutet das die Zahl 77 Stellen hat.
Genauso wie 2E3 ( = 2000 ) aus 4 (1 + 3) Stellen besteht.

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist eine einfache Fleisaufgabe bei der Dir der Computer nur begrenzt 
weiterhelfen kann, wenn Du ihn wie einen Computer nutzt und ihm die Zahl 
als Zahl zu fressen gibst. Einfacher und recht schnell kommst Du aber zu 
Deinem Ergebnis, wenn Du dem Computer beibiegst, dass Ergebnis als 
Zeichenkette zu behandeln. Dann ist es nur noch eine kleine 
Fleissaufgabe, die Zahl so zu berechnen, wie Du es mal in der 4. oder 
5.Klasse gelernt hast.
Je nach persönlcher Fähigkeit, kannst Du dann einfach 387420489 mal mit 
9 multiplizieren, oder 129140163 mal mit 729 ... was dann aber den 
Nachteil hat, dass sich über die Länge Dein Übertrag schnell über den 
Geltungsbereich Deiner Int hinaussummiert. Bei der Multiplikation mit 9 
kann er nicht mehr 19, also 1 werden.

Autor: Tippgeber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
387420489 Multiplikationen mit 9 sollte ein 
Superduperdoppelvierfachpentibumm ja wohl in unter einer Stunde 
schaffen.

Autor: Ricardo S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
a^(b^c)!=(a^b)^c

Ok, gibt also zwei Ergebnisse. Eines kurz mit 77 Stellen und das andere 
lang mit 370 Mio. Stellen.

Wäre es nun möglich die lange Zahl mit einem modernen Rechner bis auf 
die letzte Stelle auszurechnen?

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jahaaaa

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
9*9=81

81*9
1*9   =   9
8*9   = 72
_________
        729
729*9
9*9   =    81
2*9   =   18
7*9   =  63
_________1_
         6561

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ricardo S. wrote:
> a^(b^c)!=(a^b)^c
>
> Ok, gibt also zwei Ergebnisse. Eines kurz mit 77 Stellen und das andere
> lang mit 370 Mio. Stellen.
>
> Wäre es nun möglich die lange Zahl mit einem modernen Rechner bis auf
> die letzte Stelle auszurechnen?

Ja wäre es.
Wenn wir mal davon ausgehen, dass der Rechner eine Multiplikation
pro Sekunde schafft (immerhin sind das ja riesige Zahlen),
dann dauert es etwas über 12 Jahre bis er 387420489 mal mit
9 multiplizert hat.

Aber ich denke schon, dass mehr als 1 Multiplikation pro Sekunde
drinnen ist.



Autor: Mr Chip (mrchip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wäre es nun möglich die lange Zahl mit einem modernen Rechner bis auf
> die letzte Stelle auszurechnen?

Problemlos. Sind ja im Prinzip nur 370 Millionen Multiplikationen. 
Prinzipiell sollte das also in 370 Millionen Takten machbar sein, das 
dauert auf den schnellsten Pentium 4 gerade mal eine Zehntelsekunde. Ok, 
die Sache hat einen kleinen und einen grossen Haken.

Der kleine: Da kommt noch ziemlich Overhead dazu, weil ja auch umkopiert 
werden muss. Verschlimmert die Laufzeit aber wohl nur um einen linearen 
Faktor. Der grosse: So eine Zahl passt in keinen Datentyp mehr rein, 
sondern muss irgendwie anders codiert werden. Natürlich kann der 
Computer damit dann nur noch sehr langsam Rechnen, weil er keine 
Maschinenbefehle dafür hat.

Wenn man die Zahl als BCD speichert, so braucht man rund 190 Megabytes. 
Pro Multiplikation mit 9 muss diese ganze Zahl einmal mit 9 
multipliziert werden sowie die Überträge addiert. Gibt also bei einem 
gleichmässigen Wachstum der Zahl zuerst 1 Multiplikation und 
schlussendlich 370 Millionen. Und das alles 370 Millionen mal...

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Sind ja im Prinzip nur 370 Millionen Multiplikationen.

Dröhnkram. Wer seinen Grips einschaltet kommt schnell darauf, dass 36 
Multiplikationen ausreichen.

Das Programm:

   (1) Lade x mit dem Wert 9.
   (2) Führe 18 mal die Anweisung "x = x  x  x" aus.
   (3) Gib x aus.

Warum x bei Schritt (3) den Wert 9^(9^9) hat, möge sich der geneigte 
Leser bitte selbst klarmachen.

Autor: Matheman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
9^9^9 = 9^(9*9) = 9^81

Ist nicht dein ernst, oder?


9^9 != 9*9

9^9 = 9*9*9*9*9*9*9*9*9 = 387420489

Autor: katzeklo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>9^9^9 = 9^(9*9) = 9^81

>Ist nicht dein ernst, oder?

Das ist völlig korrekt:

Autor: katzeklo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: katzeklo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, aber geht TeX nicht mehr?

Autor: Kartoffel Salat (kartoffelsalat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>
> Wäre es nun möglich die lange Zahl mit einem modernen Rechner bis auf
> die letzte Stelle auszurechnen?

möglich ist mit den heutigen rechnern wohl noch vieles, ist nur die 
Frage wieviel sinn ,dass das hier macht!!

und falls Ihr es noch nicht bemerkt habt, genau für dieses Problem hat 
man die Exponentialschreibweise erfunden!

Autor: Kartoffel Salat (kartoffelsalat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
katzeklo wrote:
>>9^9^9 = 9^(9*9) = 9^81
>
>>Ist nicht dein ernst, oder?
>
> Das ist völlig korrekt:
>
9^9^9 =(9^9)^9 =81^9
9^9^9 != 9^(9^9)= 9^81

oder nicht?

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(9^9)^9  = 9^(9*9)
(9^9)^9 != 9^(9^9)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> (9^9)^9  = 9^(9*9)

Das glaub ich nicht.

Einer der mehr von Mathe versteht als ich, mein TI-92,
liefert bei 9^9^9 als Ergebnis ein freundliches Unendlich(*),
während er bei 9^(9*9) eine Zahl ausspuckt

(*) OK. das das nicht Unendlich sein kann ist mir schon
klar. Aber ich werte das mal als 'Zahl, größer als dass ich
sie darstellen könnte'. Auf jeden Fall sind beide Ergebnisse
nicht identisch. Und das war ja die Behauptung.

Logarithmieren wir doch mal um die Zahlen kleiner zu kriegen.

(9^9)^9 = 9^(9*9)

9 ln( 9^9 ) = 81 ln( 9 )

9 ln( 9^9 )  = 162 ln(3) = 177.975
81 ln( 9 ) = 177.975

Also doch.
Ich nehm alles zurück

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: 999-666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fall 1) 9^9^9 -Annahme-> (9^9)^9 -> 
196627050475552913618075908526912116283103450944214766927315415537966391 
196809

Fall 2) 9^9^9 -Annahme-> 9^(9^9) = 9^387420489 -> gigantisch groß!

Florian, Deine URL entspricht Fall 1, demnach hat der Fragensteller für 
die "nichtgrafische" Darstellung der Aufgabe die Klammern vergessen - da 
er ja das gigantische Ergebnis möchte...

Gruß
8^8^8 ;-)

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Einer der mehr von Mathe versteht als ich, mein TI-92,
>liefert bei 9^9^9 als Ergebnis ein freundliches Unendlich

Wie geil, was kostet (bzw. hat gekostet) der TI-92 nochmal?

Mein 5 Euro Billigrechner liefert ein völlig korrektes Ergebnis.

Diese Mathe lernt man glaube ich in der 8., oder? Sind einfachste 
Potenzesetze, was gibt es denn da zu diskutieren?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jupp wrote:
>>Einer der mehr von Mathe versteht als ich, mein TI-92,
>>liefert bei 9^9^9 als Ergebnis ein freundliches Unendlich
>
> Wie geil, was kostet (bzw. hat gekostet) der TI-92 nochmal?

Kann ich nicht sagen. Hab den geerbt :-)

Zu seiner Ehrenrettung: Er rechnet 9^9^9 anscheinend als 9^(9^9)
und nicht als (9^9)^9
Ich dürfte mich also beim Eintippen verhaut haben :-)
(Bäääääh, ich will meinen HP41 wiederhaben)

mea culpa

Autor: Rudolf IV von Redmond (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
9^9^9 = 9^(9^9) = 9^387420489

Das könnte man eigentlich ganz einfach programmieren. Nur dumm, dass da 
offenbar ein "Overflow" produziert wird.

#include <stdio.h>
#include <math.h>

int main(int argc, char* argv[])
{
  long double resultat;

  resultat=pow(9.0,387420489.0);

  printf("%lG",resultat);
  getchar();

  return 0;
}

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>9^9^9 = 9^(9^9) = 9^387420489

Könntest du bitte mal das erste Gleichheitszeichen entfernen? Die ist 
hier unzulässig...

Autor: Rudolf IV von Redmond (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso sollte das unzulässig sein???

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil 9^9^9 eben nicht 9^(9^9) ist.

Autor: chris (guest) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
3^3^3 = (3^3)^3 = (27)^3 = (3*3*3)*(3*3*3)*(3*3*3)    (9mal  "3x")
   (mit 27 = 3*3*3       & diese Klammer können hier weg)
oder
3^3^3 = 3^(3^3) = 3^27   = 3*3*3*3*3*3*3....          (27mal:  "3x")

Das Gleichheitszeichen ist halt nicht immer richtig!


Und was ist bei 2^2^2  ;-)

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Und was ist bei 2^2^2  ;-)

Ist doch Wurscht...es ging um 9^9^9 und um nichts anderes. 
Wahrscheinlich kommt jetz 2^2^2 = 9^9^9.

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 9^(9^9) = 9^387420489

>Das könnte man eigentlich ganz einfach programmieren. Nur dumm, dass da
>offenbar ein "Overflow" produziert wird.

Wenn Du vorher den ungefähren Wert von 9^(9^9) ausgerechnet hättest, 
wäre Dir klar geworden, warum man da mit naiver Programmierung nicht 
weit kommt.


Es gilt:

9 ^ n = 10 ^ (log(9^n))

      = 10 ^ (n log(9))

      = 10 ^ (n * 0.95424250943932487459)


Mit n = 9^9 = 387420489 folgt daraus:

9^(9^9) = 10 ^ (387420489 * 0.95424250943932487459)

        = 10 ^ 369693099.63157

        = 10^0.63157 * 10^369693099

        = 4.281 * 10^369693099
          --------------------

Ergebnis: 9^(9^9) ist eine 369693099-stellige Dezimalzahl.  Der maximale 
Wert, den eine vorzeichenlose 32-Bit-Integer-Zahl annehmen kann, ist 
dagegen mit 2^32 -1 = 4294967295 gerade mal eine 10-stellige 
Dezimalzahl.
Mit Floats im "Double-Format" kann man bis ca. 10^308 rechnen, also mit 
höchstens 308-stelligen Dezimalzahlen.  Auch das reicht jedoch für 
9^(9^9) bei weitem nicht aus - man bräuchte "ungefähr eine Million mal 
leistungsfähigere" Floats.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eben, 9^9^9 ist nicht 9^(9^9).

Autor: Frank Jonischkies (frajo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jupp wrote:
> Eben, 9^9^9 ist nicht 9^(9^9).

In der Wikipedia aber anders dargestellt:
http://de.wikipedia.org/wiki/Grahams_Zahl
"Der klammerfrei notierte Ausdruck m^m^...m^m ist deshalb mehrdeutig; in 
diesem Fall ist er - wie unter Mathematikern bei Weglassen der Klammern 
als Konvention üblich - von rechts nach links abzuarbeiten, d. h. 
beispielsweise ist m^m^m=m^(m^m) zu lesen. Diese Abarbeitungsreihenfolge 
ist auch gerade diejenige, bei der die größten Endergebnisse 
hervorgebracht werden."

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Float im double Format kann vielleicht mit Zahlen bis etwa 10^300 
rechnen, aber deswegen ist es leider noch nicht auf 300 Stellen genau 
und das muss es aber sein um das Ergebnis (ein 300 stelliges) exakt 
berechnen zu können. Also mit nativen Datentypen geht sowas mal sicher 
nicht, denn mit einem 64 Bit Datentyp kann man maximal auf 19 Stellen 
genau rechnen.
Man beötigt also spezielle Libs wie zB GNU Multiple Precision Arithmetic 
Library dazu.

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Float im double Format kann vielleicht mit Zahlen bis etwa 10^300
>rechnen, aber deswegen ist es leider noch nicht auf 300 Stellen genau
>und das muss es aber sein um das Ergebnis (ein 300 stelliges) exakt
>berechnen zu können.

Absolut richtig.  Diesen Zusatz hätte ich eigentlich nicht vergessen 
dürfen.

>Also mit nativen Datentypen geht sowas mal sicher nicht,

Nein.

>Man beötigt also spezielle Libs wie zB GNU Multiple Precision Arithmetic
>Library dazu.

Not at all.  Es reicht aus, wenn Du folgende beiden Operationen 
beherrschst:

(1) Eine beliebig große Dezimalzahl (z. B. 
"874853045898028309283748273008417857456736047856") zu einer anderen zu 
addieren: "x = x + y".

(2) Eine beliebig große Dezimalzahl zu halbieren (!): "x = x DIV 2".

Das "halbieren" mag überraschen, aber man benötigt es - ebenso wie die 
Addition - zur Implementierung der Multiplikationsroutine gemäß dem 
Algorithmus der schnellen ägyptischen Multiplikation.  Das Verdoppeln 
einer beliebig großen Dezimalzahl, das man darin außerdem noch 
durchführen muss, ist mit (1) schon erledigt, denn das Doppelte von x 
kann man ja durch "x + x" erhalten.

Aus programmiertechnischer Sicht ist sowohl (1) als auch (2) keine sehr 
anspruchsvolle Sache.  Bei (1) muss man die Stellen der Zahl von "rechts 
nach links" abklappern, bei (2) von links nach rechts.  Bei der 
Behandlung jeder Stelle entsteht ein Übertrag, der man bei der 
nachfolgenden Stelle korrekt verrechnen muss.  Das ist im Wesentlichen 
schon alles.

Als Datentyp zur Speicherung der Dezimalzahlen könnte man einfach ein 
Byte-Array nehmen (jedes Byte kodiert eine Dezimalstelle).  Das Ergebnis 
würde in dem Fall mit 370 MByte allerdings schon relativ viel RAM 
belegen.

Autor: Oldie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wie kann man sie genau berechnen?

mit Papier und Bleistift und Hirnschmalz, ist zwar alt und dauert etwas 
länger, funktioniert aber hervorragend. ;-)

Autor: chris (guest) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
2^2^2 = (2^2)^2 = 4^2 = 16

2^2^2 = 2^(2^2) = 2^4 = 16

Das ist ein spez.-Fall, der sich anders verhält als das
3-er Beispiel.
(Int, ggf. für das binäre Zahlensys.)


Und wie ist es bei 1^1^1  :-)
(ist auch nur eine ernstgemeinte Anm.)

Ich dachte, dass das 3^3^3 schon eindeutig ist
- wegen der Disk. über das "=".
Die obigen Hinweise auf Wiki. und folgendes waren offensichtl.
hilfreicher.

Autor: trick17 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also am besten man berechnet 10^10^10 und zieht dann einfach 1^1^1 ab.

duck un weg

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon klar das man es mit diesen Methoden realisieren kann, aber auch 
nichts anderes machen die angesprochenen Libs. Schließlich können die 
die Bitbreite des Prozessors auch nicht erhöhen. Ich meinte also 
eigentlich eher das die in den gängigen Programmiersprachen 
bereitgestellten Methoden für so etwas nicht geeignet sind und man noch 
ganz schön viel Gehirnschamlz investieren muss um solche optimierte 
mathematische Methoden zu erstellen.

Autor: Frank (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ein pow(pow(9,9),9) sollte eigentlich noch jeder hinbekommen, oder? Und 
die ganz harten dürfen auch mal pow(9,pow(9,9)) austesten. Dauert mir im 
Moment aber etwas zu lange ;)
pow(9,100000) dauert schon einige Sekunden und spuckt das aus: ...Mist 
zu lang zum posten... dann als Anhang...
Gängige Programmiersprache mit eingebauter Unterstützung für lange 
Integer.

Autor: Mathematiker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> pow(9,100000) dauert schon einige Sekunden und spuckt das aus: ...Mist
> zu lang zum posten... dann als Anhang...
> Gängige Programmiersprache mit eingebauter Unterstützung für lange
> Integer.

Mit ein bisschen Mathematik wird die Berechnung von 9^(9^9) um etliche 
Größenordnungen einfacher, wie AVRFan schon viel weiter oben 
festgestellt hat.

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Mathematiker: ich freue mich schon, wenn du uns das resultat 
präsentierst ;) ...ist nicht so einfach, wie es scheint; selbst mit 
math. vereinfachungen

Autor: ulf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn nur das ungefähre ergebnis wichtig ist:
9^(9^9) = 4.281248 * 10^369693099

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
meines erachtens ist das doch ganz klar 9^9^9 = 9^(9*9) =9^81

Autor: Ricardo S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte bitte der Themen Titel geändert werden in:

9^(9^9)

Danke...


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wird, so wie es AVR Fan beschrieben hat vielleicht etwas einfacher. 
Aber dieser Trick bringt nur so lange etwas, so lange die Länge des 
Ergebnisses unterhalb der Bitbreite der CPU ist. Denn wenn sie darüber 
ist muss man für eine Multilplikation auch wieder mehrere CPU 
Multiplikationen ausführen. Und über 19 Stellen (64Bit) ist man doch 
recht schnell.
Und weil zuvor geschrieben wurde dass man das so einfach in einer 
Porgrammiersprache lösen kann, weil 9^100000 auch nur einige Sekunden 
dauert, dann sollte man nicht vergessen das die Rechenzeiten exponentiel 
steigt. Über 100000 ist dann also recht schnell Schluss.

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, ich habe jetzt schnell ein progrämmchen geschrieben: der 
rechenaufwand steigt sehr(!) schnell. meine alte kiste (AMD 2500+ @ 
2950+ und 32Bit) braucht für folgende bechenungen so lange:

9^100'000
19sec

9^250'000
1min 52sec

ok, bei 64bit wäre mind. 4x schneller wäre und etwas optimierung würde 
sicherlich auch noch was bringen...

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ok, ich habe jetzt schnell ein progrämmchen geschrieben: der
>rechenaufwand steigt sehr(!) schnell. meine alte kiste (AMD 2500+ @
>2950+ und 32Bit) braucht für folgende bechenungen so lange:
>
>9^100'000
>19sec
>
>9^250'000
>1min 52sec

Wunderbar, die von mir gemessenen Zeiten sind damit praktisch identisch. 
:-)

Dass der Rechenaufwand sehr schnell steigt, ist ja das Problem an der 
Sache.  Deshalb darf man aus "9^100000 dauert ein paar Sekunden" 
keinesfalls den Schluss "9^(9^9)" ist locker in einer Stunde erledigt" 
ziehen!  Die entsprechende sehr richtige Bemerkung von Thomas sollte man 
dreimal dick rot unterstreichen.

>ok, bei 64bit wäre mind. 4x schneller wäre und etwas optimierung würde
>sicherlich auch noch was bringen...

Bei 64 Bit würde sich blos die Anzahl der Speicherzugriffe verringern, 
aber zu rechnen hätte die Kiste immer noch genausoviel.  Der Gewinn 
würde nicht wirklich ins Gewicht fallen.

Wenn man 9^(9^9) nach diesem Schema

   (1) Lade x mit dem Wert 9.
   (2) Führe 18 mal die Anweisung "x = x  x  x" aus.
   (3) Gib x aus.

berechnen würde, würden dabei genau 18 "Zwischenwerte" anfallen - nach 
jeder Iteration einer.  Diese Zwischenwerte sind:

Iteration 1: 9^3 =  7.29000000000000E+0000 * 10^2
Iteration 2: 9^9 =  3.87420489000000E+0000 * 10^8
Iteration 3: 9^27 =  5.81497370030400E+0000 * 10^25
Iteration 4: 9^81 =  1.96627050475552E+0000 * 10^77
Iteration 5: 9^243 =  7.60203375682963E+0000 * 10^231
Iteration 6: 9^729 =  4.39328503696454E+0000 * 10^695
Iteration 7: 9^2187 =  8.47945898417348E+0000 * 10^2086
Iteration 8: 9^6561 =  6.09683485452607E+0000 * 10^6260
Iteration 9: 9^19683 =  2.26627858111106E+0000 * 10^18782
Iteration 10: 9^59049 =  1.16396489616914E+0000 * 10^56347
Iteration 11: 9^177147 =  1.57695626218303E+0000 * 10^169041
Iteration 12: 9^531441 =  3.92156072351406E+0000 * 10^507123
Iteration 13: 9^1594323 =  6.03082647549096E+0000 * 10^1521370
Iteration 14: 9^4782969 =  2.19346393535189E+0000 * 10^4564112
Iteration 15: 9^14348907 =  1.05533780150190E+0000 * 10^13692337
Iteration 16: 9^43046721 =  1.17536968074619E+0000 * 10^41077011
Iteration 17: 9^129140163 =  1.62376602823123E+0000 * 10^123231033
Iteration 18: 9^387420489 =  4.28124767611117E+0000 * 10^369693099

Füttere mal Dein Programm mit den Exponenten aus den Iterationen 9, 10, 
11 und 12, also mit 19683, 59049, 177147 und 531441. Dann kannst Du 
verfolgen, wie die Rechenzeiten anwachsen.  Du wirst feststellen, dass 
sie sich mit jeder Iteration ungefähr VERNEUNFACHEN.  Damit liegt 
tatsächlich ein exponentielles Wachtum (von einer Iteration zur 
nächsten) vor.

Mein Rechner ist mit 9^531441 (Iterationsstufe 12) nach 10 Minuten 
fertig.  Damit fehlen bis zur Stufe 18 noch genau 6 Iterationsstufen. 
Das bedeutet aber nichts anderes, als dass man für die Zeit zur 
Berechnung von 9^(9^9) ganz grob 9^6 * 10 Minuten erwarten kann.  Das 
sind 5.3 Millionen Minuten oder
       >>> 10 Jahre <<<.

Fazit: Die Berechnung von 9^(9^9) durch "naives" 387420489-maliges 
Multiplizieren von 9 mit sich selbst mit einem zeitgemäßen PC ist 
möglich, aber man braucht Geduld dafür lach.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil es da offensichtlich noch gewaltige Meinungsverschiedenheiten
gibt:

Die Potenzoperation ist rechtsassoziativ, d. h.
Diese Konvention ist deswegen sinnvoll, da eine linksassoziative
Potenzierung als einfache Potenz mit einem Produkt im Exponenten
geschrieben werden kann und normalerweise auch wird:
Man hat also für beide Fälle eine Schreibweise, die ohne Klammern
auskommt.

Dies kann bspw. auch hier nachgelesen werden:

  http://en.wikipedia.org/wiki/Associative#More_examples

> Einer der mehr von Mathe versteht als ich, mein TI-92, liefert bei
> 9^9^9 als Ergebnis ein freundliches Unendlich(*),

Das stimmt zwar nicht (weil bei den meisten Taschenrechnern der
Wertebereich bei knapp unter 1e100 aufhört), aber der Rechner hat
zumindest den richtigen Ansatz gewählt.

> Mein 5 Euro Billigrechner liefert ein völlig korrektes Ergebnis.

Ich wage zu bezweifeln, dass dein Rechner neunstellige Exponenten
anzeigen kann.

Mein Taschenrechner liefert 1.966270505e77, was natürlich falsch ist.
Aber er ist von Aldi und hat sogar nur 3,48 Euro gekostet.

Nachdem mein Taschenrechner also nichts taugt, habe ich meinen PC
mit dem Term gefüttert. Nach 0,153 Sekunden lieferte er folgendes
Ergebnis:
42812477317574704803698711593056352133905548224144
35141747537230535238874717350483531936652994320333
75060417533647631000780326139047338608320802060374
70612809165574132086446019861999614520310524428581
48959811514719493517677965593021593933850150239694
26231052967581656943333463147492553849485933778120
87624957216504195220601804571301517864051014594079
04194866332733667183065441076023482363342793388473
44917149071392838763670347073322161584263884702644
65058580355824823115778277866180114720994362906904
73438366488664695023381735331493288811517612485971
20153357564439876059956217339548503950536965544532
95547762183338179903753742986603617541076696090471
83399239331453425470226983330651282587035207362363
43330809161939992399143539951742626261922504449148
89355346296338764247108036190948328339353383268116
81684096752173716022712403864241094486312416733616
31602584738577273169933875567294188775379238762791
51815197169574861839692092170993607802644764408395
92643445485180078094839593328539827016475025109537
                       ...                        
          369691100 Ziffern weggelassen           
                       ...                        
16437894757477844731142780767037267003263590250822
34292387746462391127975152902898840592704628596911
90014188420320154332647563918577185976492049122303
23811027210136918368494328574137376263796912584561
41237444060102002608592235410622770718702230402359
35641915129699628666846006630298351379027215796574
56534443278490334199454357557541697596627896410612
70387990256128353667950589936117172490285814571733
91518760228328138355866578899535027225395434516598
39173364275071543317493863779576502233071689586371
97192110578737857336943212457715521275513998317785
47671678591299645067296274837365302215234320507478
34092790565371273832640535909769963513435977537992
83680752817548382724478144536940979972304718417625
89447951540180726242836597614291883489679188153772
85476781074966161266185476266685323552900557188849
16798855470068473582685089739187008510754028188539
25349052912288203971972403223578700607328387735828
26170043150602250406601961656994397543610268552663
74036682906190174923494324178799359681422627177289

Noch Fragen? :-)

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ich:

Wie haben das nur die ganzen Genies damals gemacht?

Euler, Gauss, Fibonacci, Kepler, Pascal.....

;-)

Autor: Netbird (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Könnte bitte der Themen Titel geändert werden in:
>9^(9^9)

Jetz kann ich doch nicht widerstehen ... :

Hier ein exaktes Ergebnis und eine Abschätzung unter Anwendung purer 
Potenzrechenregeln und ohne Logarithmus (also Mathe 9./10. KLasse ..)

Zunächst den Exponenten berechnen:
9^9 = (3^2)^9= 3^(2*9) = 3^18 für den Expononenten.

Eingesetzen und gleicher "Trick" für die Basis 9:
9^(9^9) = 9^(3^18) = (3^2)^(3^18)=3^(2*3^18)=3^774840978
(das letzte liefert mein alter Casio fx85 für 2*3^18 = 774840978)

EXAKTE LÖSUNG: 3^774640978

ABSCHÄTZUNG (sehr grob)mit 2^x, da gilt:
1. 2^x < 3^x   und
2. 2^10 = 1024 circa 1000, also 2^10 ca. 10^3

Dann gilt:
2^774840978 = 2^(10*77484097,8) = (2^10)^77484097,8 ca.(10^3)77484097,8
Ca. 10^232452293,4

Also ist 9^(9^9) > 10^232452293 !!!
Da TR und PC üblicherweise nur bis 10^99 können (manchmal 10^300), ist 
klar, dass eine exakte Berechnung besondere Methoden und VIEL ZEIT 
erfordert ...

Wer will, kann jetzt mal die Zeit mit den Werten von Mr.Snowman 
überschlagen ...

MfG






Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>habe ich meinen PC mit dem Term gefüttert.

Toll.

>Noch Fragen? :-)

Ja: Welcher Algorithmus ist in Deinem Programm am Werk?  Für die 
Ziffernfolge selbst interessiert sich kein Mensch.

aufDeineAntwortgespanntbin

Autor: muckel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@yalu, Dein Rechner schiebt 370MB in 0,1xxx Sekunden durch den Speicher? 
-> alle Achtung ;-)

Autor: Netbird (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mathematische Ergänzung und Stoff zum Nachdenken über Rechenbedarf:

9^(9^9)=3^774840978

a) wird zur Ermittlung der dezimalen Stellenzahl auf die Basis 10 
umgeschrieben mit der Beziehung 10^c=3, wobei c=lg3, das ergibt
3^774840978 = 10 ^ 369 693 099,6

b) wird zur Ermittlung der Registerbreite im Binärsystem auf die Basis 2 
umgeschrieben, da 2^cx =3 mit c=ld3 (dyadischer Log.) ergibt sich
3^774840978 = 2^ 1 228 093 894, also 1 228 093 894 Bits.

Die Registerbreite beträgt also 153 511 737 Byte.

Um eine exakte Berechnung durchzuführen (darum ging es Ricardo ja, mit 
der Klarstellung der Reihenfolge), werden also mehr als 150MB für die 
Darstellung des Ergebnisses benötigt.

Kleiner Überschlag  der Bildschirmausgaben unter der Annahme 80 Zahlen 
pro Zeile und 50 Zeilen pro Bildschirm ergibt mehr als 92423 Bildschirme 
voll ...

Den Rest überlasse ich wieder den Programmieren (falls Ihr noch Lust 
habt nach diesen Zahlen ...)

MfG

Autor: Netbird (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Yalu:
Herlichen Glückwunsch! Dein Ergebnis ist in der Stellenzahl exakt so, 
wie ich es (ohne Ausführung einer konkreten Rechnung) ermittelt habe.

Habe eben erst gelesen, was Du geschrieben hast.

Jetzt bin ich aber auch neugierig, wie Dein Programm die Rechnung mit 
der Stellenzahl gelöst hat (immerhin im Speicher mehr als 150MB breit, 
oder denke ich da falsch?

Autor: yalu (Gast)
Datum:
Angehängte Dateien:
  • neun (4,08 KB, 311 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
@AVRFan:
@Netbird:

Danke für das Interesse :)

@muckel:

> @yalu, Dein Rechner schiebt 370MB in 0,1xxx Sekunden durch den
> Speicher? -> alle Achtung ;-)

Habe einfach einen Tiny11, für den ich sonst keine Verwendung mehr
hatte, per Cobalt-60-Bestrahlung zum Quantencomputer umfunktioniert
;-)

Nein, natürlich nicht. Ich hatte geschrieben

> Nach 0,153 Sekunden lieferte er folgendes Ergebnis:

Das stimmt exakt so, d. h. er hat jeweils die 1000 ersten und letzten
Ziffern des Ergebnisses berechnet, mehr nicht. Das Programm mit ein
paar erläuternden Kommentaren hängt an.

Das Programm ist in Python und schlampig programmiert, also
a****lahm. Um alle 369693100 Ziffern zu berechnen, bräuchte es auf
meinem 3,2-GHz-Pentium hochgerechnet über 100 Jahre, da die Rechenzeit
quadratisch mit der gewünschten Ziffernzahl wächst.

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
<< Wie haben das nur die ganzen Genies damals gemacht? >>
Ich habe mal gehört, dass die Aufgaben in kleine Häppchen geteilt an 
Hausfrauen zum rechnen weiter gegeben wurden, weil die die Zeit und 
Geduld mitbrachten solche sinnlosen Zahlenkolonnen zu Fuss auszurechnen.

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@yalu: Alles klar, danke.

Zitat aus dem Quelltext Deines Programms:

>Die Berechnung der letzten nziff Ziffern erfolgt in Modulo-10**nziff-
>Arithmetik [...]

Das also ist des Pudels Kern... und Du schämst Dich gar nicht für so 
einen faulen Zauber? lach

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Um alle 369693100 Ziffern zu berechnen

Du hast recht, das verdammte Ding hat 369693100 Ziffern, nicht 
369693099.
10^3 = 1000 hat ja auch vier Ziffern, nicht drei.

Mein Fehler urgs.

Autor: Netbird (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@yalu und alle anderen Interessenten ...

Vielen Dank, das Knobeln und die Auflösung am Schluss hat richtig Freude 
gemacht. Da musste programmmäßig ja getrickst worden sein, sonst wäre 
die schöne Logik defekt gewesen ...

Übrigens: Alle, die so etwas für sinnlos halten, haben auf eine (aber 
auch nur eine Art) Recht, das Ergebnis ist zu nichts nütze.
Hier ist -wie oft bei mathematischen Problemen- der Weg das Ziel.

Gruß, Netbird

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das also ist des Pudels Kern... und Du schämst Dich gar nicht für so
> einen faulen Zauber? *lach*

Ok, es geht auch ohne faulen Zauber, wenn man etwas fremde Hilfe in
Anspruch nimmt. Folgendes C-Programm braucht zwar 135 Sekunden,
berechnet dafür aber die komplette Zahl:
#include <stdio.h>
#include <gmp.h>

int main(void) {
  mpz_t a, b;
  int i;

  mpz_init(a);
  mpz_init(b);
  mpz_set_ui(a, 9);

  for(i=0; i<18; i++) {
    mpz_mul(b, a, a);    // b = a * a
    mpz_mul(a, b, a);    // a = b * a
  }
  // gmp_printf("%Zd\n", a);
  return 0;
}

Die fremde Hilfe kommt in Form der GMP-Bibliothek daher.

  http://gmplib.org

Was die Jungs dort an Registern ziehen, nur um zwei Zahlen zu
multiplizieren, ist unglaublich. Da gibt es nicht weniger als 4
Multiplikationsalgorithmen, die je nach Größe der Operanden -
teilweise auch kombiniert - eigesetzt werden. Bei besonders großen
Zahlen wird sogar der scheinbar riesige Umweg über Fouriertrans-
formationen gegangen, um am Ende doch schneller zum Ziel zu gelangen.

Was allerdings mehr Zeit kostet als die eigentliche Berechnung ist die
Umrechnung nach dezimal, was in der auskommentierten zweitletzten
Programmzeile passiert. Aktiviert man diese, braucht das Programm fast
eine Stunde. Aber immer noch schneller als 10 oder gar 100 Jahre :-)

Ich habe übrigens das Ergebnis in eine Datei umgeleitet und die ersten
und letzten 1000 Ziffern mit den Ergebnissen aus meinem letzten
Beitrag verglichen. Sie stimmen tatsächlich überein.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Huch, jetzt habe ich doch glatt vergessen, das Ergebnis zu posten :D

Hier kommt's:

... Dateianhang ... Browse ...

Nee, lieber doch nicht ... Cancel. Andreas wird es mir sicherlich
danken, wenn ich seinen Server nicht mit solchem Unfug zumülle.

(Mal ganz abgesehen von den Stunden, während derer mein Upstream
blockiert wäre)

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habs jetzt auch mal selber mit der GMP Lib ausprobiert und finde es 
interessant, dass die Implementierung mit der for Schleife um einiges 
langsamer ist, als wenn man die Potenzfunkionen der Lib benützt.

Ausführungszeit mit der Potenzfunktion:
mpz_set_ui(a,9);
z = pow(9,9);
mpz_pow_ui(b, a, z);
real    1m30.608s
user    1m25.261s
sys     0m1.780s

und mit der for schleife:
for(i=0; i<18; i++) {
  mpz_mul(b, a, a);    // b = a * a
  mpz_mul(a, b, a);    // a = b * a
}
real    2m30.549s
user    2m14.096s
sys     0m2.960s

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Was die Jungs dort an Registern ziehen, nur um zwei Zahlen zu
>multiplizieren, ist unglaublich.

Unglaublich? Glaub ich!

:wird sogar der scheinbar riesige Umweg über Fouriertrans-
:formationen gegangen, um am Ende doch schneller zum Ziel zu gelangen.

OK, das liegt dann schon weit jenseits der Feld-Wald-Und-Wiesen-Mathe.

>Was allerdings mehr Zeit kostet als die eigentliche Berechnung ist die
>Umrechnung nach dezimal,

Holla :-)  Gibts in der Lib vielleicht auch eine Funktion, mit der man 
riesige Zahlen vom Neunersystem ins Dezimalsystem umrechnen kann?  Wenn 
ja, wäre die 18-malige Kubizierung oder andere Multiplizierereien 
nämlich obsolet, denn um die Ziffernfolge von 9^(9^9) im Neunersystem zu 
bekommen, muss man ja überhaupt nichts rechnen:

10000000000000000000000000000............0000000000000000000000000000

mit genau 1000000000 Nullen hinter der "1" ("1000000000" im 
Neunersystem!).

>fast eine Stunde. Aber immer noch schneller als 10 oder gar 100 Jahre :-)

Eine Stunde... wow... damit kann man doch leben.

> [...] 1000 Ziffern mit den Ergebnissen aus meinem letzten
>Beitrag verglichen. Sie stimmen tatsächlich überein.

So solls sein.

"Gruß zurück" (lach)






PS: Wie groß ist eigentlich 9^(9^(9^9))? ;-)

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Habs jetzt auch mal selber mit der GMP Lib ausprobiert und finde es
> interessant, dass die Implementierung mit der for Schleife um
> einiges langsamer ist, als wenn man die Potenzfunkionen der Lib
> benützt.

Finde ich auch interessant. Hab's aber nicht ausprobiert, da die dort
eingesetzte Power-Funktion so funktioniert:

   "Normal mpz or mpf powering uses a simple binary algorithm,
   successively squaring and then multiplying by the base when a 1 bit
   is seen in the exponent, ..."

Das bedeutet (wenn ich richtig gerechnet habe) 41 Multiplikationen,
also deutlich mehr als die 18 von AVRFan.

Es könnte natürlich seini, dass die 41 Multiplikationen "leichter"
sind und deshalb schneller ausgeführt werden.

Die Rechenzeit wird maßgeblich durch die größte durchzuführende
Multiplikation bestimmt. Dies ist bei dem Verfahren von AVRFan die
letzte mit den Operanden
x ist dabei das Gesamtergebnis. Bei der GMP ist es die zweitletzte
(die letzte ist eine Multiplikation mit 9 und dürfte relativ schnell
gehen). Beide Operanden haben dabei den Wert
Möglicherweise geht diese Multiplikation schneller. Aber wie
geschrieben, Ich habe diesbezüglich nichts ausprobiert.

> Gibts in der Lib vielleicht auch eine Funktion, mit der man riesige
> Zahlen vom Neunersystem ins Dezimalsystem umrechnen kann?

Soweit ich gesehen habe, gibt es die nicht, zumindest nicht direkt.
Man kann natürlich mit

  mpz_init_set_str(mpz_t ergebnis, "1000000...000000", 9);

Die Zahl vom Neunersystem in die interne Binärdarstellung umwandeln
und diese dann mit mpz_printf wieder ausgeben. Es würde mich
allerdings wundern, wenn das schneller ginge.

Ok, ich war schon zweimal verwundert, so dass mich das vielleicht doch
nicht wundern würde :-)

Aber vielleicht sollte man die Zahl eh besser im Neunersystem stehen
lassen. Irgendwie kann man sie sich dann besser merken.

> PS: Wie groß ist eigentlich 9^(9^(9^9))? ;-)

Hmm, diese Zahl ist wohl noch etwas größer und sprengt
höchstwahrscheinlich die 512-MB-Grenze meines Rechner :(

Nur so viel kann ich jetzt schon sagen: Sie endet mit der Ziffer 9.

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>   "Normal mpz or mpf powering uses a simple binary algorithm,
>   successively squaring and then multiplying by the base when a 1 bit
>   is seen in the exponent, ..."

Ja, so werden Ganzzahl-Potenzierungen üblicherweise durchgeführt.

>Möglicherweise geht diese Multiplikation schneller. Aber wie
>geschrieben, Ich habe diesbezüglich nichts ausprobiert.

Wer weiß... Anyway können wir das 9^(9^9)-Problem mittlerweile als 
gelöst betrachten, denke ich.

>Ok, ich war schon zweimal verwundert, so dass mich das vielleicht doch
>nicht wundern würde :-)

lach Einen Versuch wärs vielleicht noch wert, just for fun.

>Aber vielleicht sollte man die Zahl eh besser im Neunersystem stehen
>lassen. Irgendwie kann man sie sich dann besser merken.

Scherzkeks :-)

>Hmm, diese Zahl [ 9^(9^(9^9)) ] ist wohl noch etwas größer und sprengt
>höchstwahrscheinlich die 512-MB-Grenze meines Rechner :(

Selbst wenn Du sämtliche Materie im Weltall nehmen und sie zu einem 
Computer verbauen könntest - keine Chance.  Für 9^(9^(9^9)) müssen ja
grob 10^370000000 Bytes irgendwo abgespeichert und dann auch noch 
verrechnet werden. Unter der Annahme, dass jedes Atom im Universum (von 
Kosmologen geschätzte Anzahl: 10^79) stolze 100 GByte (= 10^11 Byte) 
Daten speichern könnte, ergäbe das eine Gesamt-Kapazität von 10^90 Byte. 
Eine Milliarde Universen zusammengenommen brächten es auf 10^99 Byte. 
Das ist gemessen an 10^370000000 ein Witz.

Tatsächlich liegt schon die Größe der in dieser Notation so unschuldig 
aussehenden Zahl 9^(9^9) jenseits jeder Vorstellungskraft, und über 
9^(9^(9^9)) sollte man wohl besser gar nicht erst nachdenken.

>Nur so viel kann ich jetzt schon sagen: Sie endet mit der Ziffer 9.

:-)

Nachtrag: Wer sich mit 7^(7^7) zufriedengibt, hat es leicht. Diese Zahl 
hat "nur" 695975 Dezimalstellen, und die komplette Berechnung mit der 
naiven Methode (7^7 mal "*7", Zehn-Zeilen-Routine) dauerte auf meinem 
Durchschnitts-PC keine halbe Stunde. Es ist schon verblüffend.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.