In einigen Situationen verwendet man normalerweise einen Integer-Wert, der groß genug ist, um Unendlichkeit darzustellen. Ich verwende normalerweise die größte darstellbare positive/negative Ganzzahl. Dies führt normalerweise zu mehr Code, da Sie vor nahezu allen arithmetischen Operationen prüfen müssen, ob einer der Operanden unendlich ist, um Überläufe zu vermeiden. Manchmal wäre es wünschenswert, gesättigte Integer-Arithmetik zu haben. Aus diesem Grund verwenden einige Leute kleinere Werte für die Unendlichkeit, die ohne Überlauf mehrmals hinzugefügt oder multipliziert werden können. Was interessiert mich ist die Tatsache, dass es sehr häufig ist (besonders bei der Programmierung Wettbewerbe) zu sehen:Warum ist unendlich = 0x3f3f3f3f?
const int INF = 0x3f3f3f3f;
Warum ist diese Zahl besonders? Es ist Binärdarstellung ist:
00111111001111110011111100111111
Ich sehe keine besonders interessante Eigenschaft hier. Ich sehe, es ist einfach zu tippen, aber wenn das der Grund wäre, würde fast alles tun (0x3e3e3e3e, 0x2f2f2f2f, etc). Es kann einmal ohne Überlauf hinzugefügt werden, was ermöglicht:
a = min(INF, b + c);
Aber alle anderen Konstanten würden dann tun. Googeln zeigt mir nur eine Menge Code-Schnipsel, die diese Konstante verwenden, aber keine Erklärungen oder Kommentare.
Kann jemand es finden?
Haben Sie irgendein konkretes Beispiel hierfür in einem allgemeinen Kontext verwendet wird (und nicht innerhalb eines speziellen Algorithmus, wo es Sinn machen könnte)? – Mat
Ich markierte dies als C, da eine schnelle Google-Suche nur C-Code findet, der diese Konstante verwendet. Fühlen Sie sich frei, neu zu schreiben. – JJJ
@Mat: Nehmen Sie zum Beispiel einen beliebigen Algorithmus, der kürzeste Pfade in einem Graphen berechnet. Die Entfernung zu den unerreichbaren Scheitelpunkten vom Anfangsscheitel ist theoretisch unendlich. Du brauchst eine Möglichkeit, das darzustellen (aber Floating Point zu verwenden wäre ein Overkill). Es könnte Beispiele für sehr unterschiedliche Algorithmen geben, die dies verwenden. Ich habe ein konkretes Beispiel gegeben, aber die Technik ist praktisch, wenn Sie "Unendlichkeit" in Pseudocode schreiben. – Gabriel