2016-06-21 4 views
1

Ich bin ein C++ - Programm zu debuggen. Es gibt eine Variable x vom Typ double, gdb gibt den Wert inf aus. Dennoch gibt der folgende Ausdruck false obwohl der Wert von x nichtWas ist Inf in Gdb

änderte sich

x == std::numeric_limits<double>::max()

Wenn gdb inf sagt, ist das nicht die maximal möglichen Wert für diesen Typ (double)? Wenn nicht, was bedeutet das?

Antwort

3

Es bedeutet, dass x == std::numeric_limits<double>::infinity().

Eine Fließkomma-Implementierung nicht unbedingt muss unendlich unterstützen, aber die gemeinsame - IEEE754 - tut.

Ab C++ 11 können Sie std::isinf(x) verwenden, um zu testen, ob eine Fließkommazahl unendlich ist.

3

Nein, unendlich ist nicht der Maximalwert; In diesem Sinne ist es überhaupt kein "Wert".

Infinity, wie NaN, ist ein "spezieller Wert", den Ihre IEEE754 Gleitkommazahlen annehmen können. Die zwei von ihnen zeigen ungewöhnliche Eigenschaften (z. B. NaN! = NaN) und sitzen nicht auf der Zahlenlinie in dem sonst numerischen Bereich Ihres gewählten Fließkommatyps.

Obwohl 1.79769e + 308 (std::numeric_limits<double>::max() auf meinem System) ist eine sehr große Zahl, es ist ein lang Weg weg von der Unendlichkeit. Jeder einzelne potentielle Wert dazwischen (und es gibt buchstäblich eine Unendlichkeit von ihnen) ist bei diesem Typ nicht darstellbar. Die Funktionen "min" und "max" wären im Hinblick auf die numerische Domäne double nicht sinnvoll, wenn sie lediglich -inf und inf zurückgeben.

+0

Ich bin mir ziemlich sicher + INF und -INF sitzen auf der Nummernleitung. Insbesondere sitzen sie an jedem Ende. Formal sind beide Unendlichkeiten in Bezug auf die endlichen Zahlen geordnet. – MSalters

+0

Auch "jeder einzelne potenzielle Wert zwischen 1.79E308 und + INF (und es gibt buchstäblich eine Unendlichkeit von ihnen)" ist ein bisschen irreführend. Es gibt genau so viele rationale Zahlen zwischen 1,0 und 2,0 oder zwischen 0,01 und 0,02 oder Pi und e. Mathematik kann ziemlich kontraintuitiv sein, gebe ich zu. – MSalters

+1

Eine Definition dieser * Art * der Unendlichkeit, die ich besonders nützlich finde, ist eine Zahl x, die für irgendeinen Wert von y größer als y ist. – Bathsheba