Wie lange dauert es, bis ein Überlauf um ein Vielfaches (von Null ausgehend) stattfindet?

7

Wenn ich Code wie diesen habe

%Vor%

Wie lange dauert es theoretisch, bis die Schleife beendet ist?

    
pdeva 31.07.2010, 00:57
quelle

5 Antworten

15

Nehmen wir an, Sie haben einen sehr schnellen Computer, der ungefähr 2 Milliarden Schleifeniterationen pro Sekunde ausführen kann (ein 2-GHz-Rechner könnte das nur tun, wenn es wirklich nicht geht) nichts in der Schleife. Da Long.MAX_VALUE 2 Milliarden mal 4 Milliarden ist, wird diese Schleife etwa 4 Milliarden Sekunden oder etwas über 120 Jahre dauern.

Es hat keinen Sinn, diese Schleife heute zu starten. Warten Sie, bis die Computer schneller werden, und dann wird es früher erledigt.

    
Greg Hewgill 31.07.2010, 01:01
quelle
4

Ich glaube, die Antwort, nach der Sie suchen, lautet: Sie wird nicht in Ihrem Leben enden.

Edit: Ich sollte das qualifizieren - Auf bestehender Hardware oder Hardware, die ich mir vorstellen kann; vielleicht, wenn Quantencomputer populär wird, müssen Sie diese Frage neu bewerten.

    
Bill K 31.07.2010 01:00
quelle
2

Dies könnte ein ganzes Leben dauern.

Aber gemäß dem Titel der Frage, schätze ich, dass Sie versuchen, eine Schleife für sehr viele Male auszuführen, und Sie planen, die Schleife zu unterbrechen, wenn eine bestimmte Bedingung auftritt. Sie haben einige

%Vor%

Und Sie müssen nur sicherstellen, dass Sie wegen Überläufen keine Ausnahme bekommen. (Beispiel: Sie werden einen seismischen Sensor jahrelang überwachen.) In diesem Umfang können Sie sicher gehen.

Aber auf der anderen Seite ist das kein guter Programmierungsansatz. Auf jeden Fall können Sie den Code verbessern, indem Sie einen anderen Weg verwenden. (Kann periodische Überprüfungen sein)

    
quelle
1

Eine mögliche Antwort ist null Sekunde. der Compiler könnte sehr aggressiv sein und die gesamte Schleife optimieren, da es scheinbar nichts Interessantes bewirkt ...

Hier ist eine großartige Geschichte: Compiler haben eine Schleife optimiert, die nach dem Gegenbeispiel von Fermat's Last Theorem sucht. Weil der Satz richtig ist (so wird uns gesagt) und es gibt kein Gegenbeispiel, sollte die Schleife niemals enden. aber Compiler entscheiden, dass es beendet werden sollte.

Ссылка

(der Artikel erwähnt, dass ein Java-Compiler die Fermat-Schleife nicht beenden darf)

    
irreputable 31.07.2010 06:12
quelle
0

setze dies in wolframalpha.com

(2 ^ 63 -1) / (2 * 10 ^ 9) Sekunden

der 2 ^ 63-1 ist der aktuelle Wert von MAX_VALUE, und 2 * 10 ^ 9 ist ein 2-GHz-Prozessor, der die Schleife bei jedem Takt erhöht.

jetzt setzen

(2 ^ 63 -1) / (4 * 10 ^ 9) Sekunden

das entspricht einer Verdopplung der Maschinengeschwindigkeit auf 4 GHz.

Der schnellste Supercomputer macht 1,75 Petaflops (10 ^ 15). Das ist eine parallelisierte Anwendung, also ist es nicht eine große Schleife, aber wenn Sie fragen "Wie lange würde es dauern, 2 ^ 63-1 Flops zu machen", auf dieser Maschine ist es

Ссылка ^ 63 + -1) / (1.75 * 10 ^ 15) + Sekunden

Die schnellste Geschwindigkeit, mit der wir einen Transistor betrieben haben, ist 500 GHz. aus Ссылка s_law

"Der Transistor arbeitete oberhalb von 500 GHz bei 4,5 K (-451 ° F / -268,65 ° C) [41] und Simulationen zeigten, dass er wahrscheinlich bei 1 THz (1000 GHz) laufen würde einzelner Transistor. "

Wenn du das also in Wolfram alpha steckst, bekommst du 7 Monate. Ein einzelner Transistor ist also keine Schleifenverarbeitungseinheit, aber Sie bekommen den Punkt. Denkbare Hardware ist innerhalb unseres technologischen Verständnisses, sogar um durch 2 ^ 63-1 Schleifeniterationen abzuwandern. Wenn Sie das OP als "wie lange 2 ^ 63 Bit-Flips" betrachten, dann erfüllt diese Maschine diese Kriterien und wird im Laufe des Lebens leicht fertiggestellt.

Aber wenn wir auf 128-Bit-Computing umsteigen, haben wir keine Chance ...

    
hvgotcodes 31.07.2010 01:23
quelle

Tags und Links