Autor |
Beitrag |
Harry M.
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Mo 25.10.04 23:19
wie kann ich 60 hoch 60 berechnen ohne umständilich 60 * 60 * 60 * 60 usw schreiben zu müssen
habe auch schon an eine schleife gedacht. ich denke aber wegen performance-gründen, das eine mathematische formel schneller brechnet ist als immer wieder schleifen zudurchlaufen Moderiert von Klabautermann: Topic aus Off Topic verschoben am Mo 25.10.2004 um 23:57
|
|
.Chef
Beiträge: 1112
|
Verfasst: Mo 25.10.04 23:30
Willkommen in der wunderbaren Welt der Logarithmengesetze:
Delphi-Quelltext
Gruß,
Jörg
_________________ Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
|
|
BenBE
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 25.10.04 23:31
60 ^ 60
= (60 ^ 30) ^ 2
= ((60 ^ 15) ^ 2) ^ 2
= ((60 ^ 14 * 60) ^ 2) ^ 2
= (((60 ^ 7) ^ 2 * 60) ^ 2) ^ 2
= (((60 ^ 6 * 60) ^ 2 * 60) ^ 2) ^ 2
= ((((60 ^ 3) ^ 2 * 60) ^ 2 * 60) ^ 2) ^ 2
= ((((60 ^ 2 * 60) ^ 2 * 60) ^ 2 * 60) ^ 2) ^ 2
Naja, das das auf ne Rekursion rausläuft, sollte jetzt ersichtlich werden
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Harry M.
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Mo 25.10.04 23:33
thx check das gleich mal ab....
|
|
Harry M.
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Mo 25.10.04 23:48
unter dem richtigen begriff bin ich auch in der hilfe fündig geworden.
Delphi-Quelltext 1:
| Label1.Caption := FloatToStr(X); |
muss es doch dann heissen und wie kriege ich den spass in einen integer wert? für ne progress?
|
|
Motzi
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Di 26.10.04 00:40
User-Xy2004 hat folgendes geschrieben: | ..und wie kriege ich den spass in einen integer wert? für ne progress? |
gar nicht.. 60^60 = 4887367798068925748932275227377460386566085017600000000000000 und das oberste Limit für einen Integer (bzw eigentlich unsigned integer) ist 4294967296. Also doch etwas niedriger..!
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
Adrian
Beiträge: 314
|
Verfasst: Di 26.10.04 08:26
Servus!
Man gebe den Begriff "Power" ein und verwende die Hilfe...
Gruß,
Adrian
|
|
.Chef
Beiträge: 1112
|
Verfasst: Di 26.10.04 08:36
@User-Xy: Wie wärs denn, wenn du gleich mal schreiben würdest, was du machen willst. Oder sollen wir hier noch ewig rumraten?
_________________ Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
|
|
Gausi
Beiträge: 8538
Erhaltene Danke: 475
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 26.10.04 10:38
Motzi hat folgendes geschrieben: | 60^60 = 4887367798068925748932275227377460386566085017600000000000000 |
Das kann nicht stimmen. 10^60 hat schon 61 Stellen. 60^60 müßte nach meiner Überlegung alleine mindestens 60 Nullen am Ende haben, und noch einiges davor. Deine Zahl ist viel zu klein - an deiner Aussage ändert sich aber natürlich nichts..
Edit: 60^60= 6^60 * 10^60
6^60 = 48873677980689257489322752273774603865660850176
10^60 = 1 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
Quelltext 1:
| 60^60 = 48873677980689257489322752273774603865660850176000000000000000000000000000000000000000000000000000000000000 |
Moderiert von Christian S.: Code-Tags hinzugefügt, damit Zahl gescrollt wird
_________________ We are, we were and will not be.
|
|
Motzi
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Di 26.10.04 10:47
Gausi hat folgendes geschrieben: | Motzi hat folgendes geschrieben: | 60^60 = 4887367798068925748932275227377460386566085017600000000000000 | Das kann nicht stimmen. 10^60 hat schon 61 Stellen. 60^60 müßte nach meiner Überlegung alleine mindestens 60 Nullen am Ende haben, und noch einiges davor. Deine Zahl ist viel zu klein - an deiner Aussage ändert sich aber natürlich nichts.. |
Hast recht.. da is was beim kopieren verloren gegangen.. Das richtige Ergebnis ist:
Quelltext 1:
| 48873677980689257489322752273774603865660850176000000000000000000000000000000000000000000000000000000000000 |
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
.Chef
Beiträge: 1112
|
Verfasst: Di 26.10.04 10:47
Motzi hat folgendes geschrieben: | 4887367798068925748932275227377460386566085017600000000000000 |
Diese Nullen vertreten symbolisch die insgesamt sechzig Nullen, die eigentlich dahin gehören.
*editzulangsam*
_________________ Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
|
|
Gausi
Beiträge: 8538
Erhaltene Danke: 475
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 26.10.04 10:53
Naja, auf die paar Nullen kommts ja auch nicht an, wenn man die Zahl für ne Progressbar braucht
Ich würde aber auch gerne wissen, was er machen möchte...wahrscheinlich alle möglichen Schachpartien auflisten oder so
_________________ We are, we were and will not be.
|
|
Harry M.
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Di 26.10.04 13:14
bei x:=exp(60*ln(60))komme da irgend wie immer zu folgendem ergebnis 4,88736779806893E106 deshalb meine frage nach der kovertierung nach integer. das es ein bisschen mehr wird konnte ich mir ja schon denken aber dann gleich soviel das es sich nicht mehr mit ner progress anzeigen lässt. naja... man könnt jetzt wieder umständilich über umständliche tricks wie division usw nachdenken. aber ich lasse das dann mal so laufen.
im übrigen ich bastel grad an einem wörterbuchgeneartor, welcher die file.dic gleich passed auf 1000 zu schneidet und beid dem ich auch mal neustarten kann, dh den prozeß mal unterbrechen um ihn später wieder fortzusetzen. soweit geht das ding auch schon. da ich doch nu schon mehrere tage auf ein ergebniss warte und auch noch ein paar tage warten muß bis fertg is hätte ich gerne ne progress die mit es verrät.
|
|
Gausi
Beiträge: 8538
Erhaltene Danke: 475
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 26.10.04 14:43
Ich habe keine Ahnung von Wörterbuchgeneratoren, aber ich gebe mal noch nen Hinweis zu dem Zahlenproblem.
Du willst das in einer Progressbar verwenden. Ich nehme also mal an, dass du irgendeine Operation/Rechnung/sonstwas hast, welche überschlagsweise 60^60 Schritte benötigt. Da musst du, wie du richtig erkannt hast, ein paar Tage drauf warten. Ich will mal etwas erläutern, was ein "paar Tage" in dem Fall sind:
Schau dir folgendes Gedankenspiel an.
Annahme: 3 GHz Rechner, 1 Takt = 1 Rechenschritt (völlig utopisch)
pro Sekunde kannst du also 3*10^9 Operationen durchführen. Rechnen wir großzügig mit 10^10 Operationen pro Sekunde. (also mit nem ~10GHz Rechner)
1 Jahr hat 31.536.000 Sekunden. Rechnen wir großzügig mit 10^8 (das ist ungefähr das 3fache). In einem Jahr machst du also 10^18 Rechenschritte.
Für deine 60^60 (~10^106, rechnen wir großzügig mit 10^100, das sind 0.0001% deines Problems) Operationen benötigst du also knappe 10^82 Jahre.
Das Universum existiert seit ca. 15.000.000.000 Jahren. Rechnen wir großzügig mit 10^11 Jahren, das wären 100 Milliarden Jahre.
Du benötigst also 10^71 mal so lange, wie ein normales Universum existiert.
Und wenn du deine Berechnung aufteilst auf mehrere Rechner, und du hättest für jeden Erdenbürger 10 Rechner (großzügig 10 Milliarden Menschen, also 10^12 Rechner), dann könntest du etwas Zeit einsparen, und würdest nur 10^59 Universen Zeit brauchen.
Klar, was ich mit "auf die paar Nullen kommts nicht an" meinte? du kannst die 60 Nullen am Ende locker weglassen, und würdest trotzdem ein paar Milliarden Jahre brauchen, selbst wenn jeder Rechner auf der Welt an deinem Problem arbeitet...
_________________ We are, we were and will not be.
|
|
GTA-Place
Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Di 26.10.04 18:25
Wieso gibt
Delphi-Quelltext
1,15292150460685E18
und nicht 3600?
|
|
NeWsOfTzzz
Beiträge: 233
D4 Prof
|
Verfasst: Di 26.10.04 18:32
hmm es gibt doch int64.. warum gibt es eigentlich nicht int128 etc. für größere zahlen? ^^
|
|
Harry M.
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Di 26.10.04 20:56
habe mir die sache heute nochmal angesehn. die formel kann irgendwie nicht ganz richtig sein. ob wohl sie programmier-technisch richtig ist. der fehler liegt wohl ehr in meiner in meiner kunst zurechnen. wo bei ich mit 60 hoch 60 eine relativ hohe zahl genommen habe
also nochmal, mit kleien beträgen:
wenn ich 10*10*10*10 // IntToStr(10*10*10*10) // rechne komme ich auf 10000 - was konkret richtig ist
wenn ich 10 hoch 4 // FloatToStr(exp(10*ln(4))) // rechne was meiner auffassung nach das gleiche ist komme ich aber auf 1048576 - was zwar mathematisch richtig sein mag ab nicht mein ergebnis ist
weiß den hier jemand was ich meine und wie ich zum richtigen ergebnis komme? ich habe es mit zahlen leiden nicht so...
kurz noch ein paar wort zu der ansicht von gausi.
sehr intressantes gedankenspiel. von den math. grössen habe ich zwar nicht so viel verstanden, aber kappiert worau es hinaus läuft
ich hoffe in wenigen jahren sind rechner mit 10 und mehr GHz für geld zukaufen zukönnen.
kleiner scherz. wenn das nicht in einer akzeptablen zeit machbar ist (akzeptabel=so 8 monate bis 1 jahr) werde ich diese idee wieder verwerfen
|
|
.Chef
Beiträge: 1112
|
Verfasst: Di 26.10.04 21:07
Du hast die e-Funktion falschrum angewendet. Aus
Delphi-Quelltext
wird
z:=exp(y*ln(x));.
_________________ Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
|
|
Karlson
Beiträge: 2088
|
Verfasst: Di 26.10.04 21:10
GTA-Place hat folgendes geschrieben: | Wieso gibt
Delphi-Quelltext
1,15292150460685E18
und nicht 3600? |
Noch nie was von Logaritmen gehört?
Basis und Exponent sind da vetauscht. Mit anderen Worten rechnest du 60 zur Basis 2 aus.
2^60 = 1,15[..]*10^18
Für 60^2 müsstest du exp(2*ln(60)) angeben.
|
|
Harry M.
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Di 26.10.04 21:51
von logaritmen cosinus und sonem zeugs habe ich vor jahren in der schule mal was von gehört. aber auch da ist leider nicht viel haft geblieben. wie ich eingesteh muß.
von soviel zahlen wirr war wird mir schlecht.
ich gebe es erstmal an der stelle auf. das prog läuft ja soweit.
aber danke an alle die sich meiner angenommen haben.
|
|