2011-01-14 10 views
6

In bestimmten.C++ sqrt -1 zurück # IND000000000000

Im einigen mathematischen Operationen zu tun, und die Anwendung stürzte immer wieder ab, weil ein doppelt so weit verbreitet ist passiert, um den Wert zu erhalten. -1 # IND000000000000, wenn „etwas "Zahlen sind sqrt'ed ... Was ist das? Unbestimmt? Unendlich? Zu groß um zu passen? Keine perfekte Quadratwurzel? Gibt es eine Möglichkeit, dies zu lösen? Vielen Dank im Voraus! EDIT: Wie kann ich überprüfen, ob ein Doppel diesen Wert hat? Ich habe versucht: Wenn (x == 0x-1. # IND000000000000) und andere Variationen aber nicht funktioniert haben. Ist es möglich zu überprüfen, ob eine Variable diesen Wert hat?

+1

sind 'einige Zahlen' vielleicht kleiner als 0? Sagen Sie mir, Herr, was ist der sqrt von -1 – EnabrenTane

+4

Die Quadratwurzel von -1 ist i. –

+5

Offensichtlich meinte EnabrenTane: "Was ist das IEEE 754 Quadrat von -1.0?" –

Antwort

10

Eigentlich ist die Zeichenfolge -1.#IND000000000000 ist kein Wert, von einer Funktion zurückgegeben, aber es ist ein von einer gemeinsamen Darstellungen eines QNaN, Quiet Not-a-Number, der speziellen IEEE-754-Wert, die ungültige Zahl darstellt, die nicht die Ursache wird Ausnahme (es gibt auch SNaN, Signalling NaN, die die Gleitkommaausnahme verursachen würde, falls aktiviert). Die häufigste Ursache hierfür ist das Aufrufen einer Funktion mit einem Argument außerhalb der Domäne.

+1

Es gibt nicht nur einen solchen Wert, sondern viele. –

+0

Ja, viele bestimmte Bit-Layouts repräsentieren den gleichen "Wert von NaN". – mbaitoff

0

Ohne einen komplexen Typ zu verwenden, verursacht sqrt mit einem Wert unter 0 eine Ausnahme.

1

Wenn das Argument negativ ist, tritt ein Domänenfehler auf und setzt die globale Variable errno auf den Wert EDOM.

2

Der Wert #IND000000000000 ist ein ungültiger numerischer Wert. Dies wird oft als QNaN-Wert (Quiet Not-A-Number) bezeichnet, da es einen unbestimmten Typ darstellt, aber nicht dazu führt, dass Berechnungen fehlschlagen.

Wahrscheinlichkeiten sind die schwer fassbaren Zahlen, deren Quadratwurzel Sie zu bestimmen versuchen, sind negative Zahlen, für die dieser Wert nicht definiert ist. Weitere Informationen finden Sie unter Wikipedia.

Zum Lösen müssen Sie zunächst ermitteln, wobei das Problem auftritt. Das bedeutet, dass Sie entweder selbst mit einem Debugger durchgehen und die Werte der Variablen beobachten oder Ihren Code posten müssen, damit wir dasselbe tun können.

0

Es ist eine NaN (Not A Number). Es bedeutet, dass Sie sqrt mit einem negativen Argument aufgerufen haben.

Beifall & hth.,

5

NaNs (wie die „unbestimmt“ Sie und „unendlich“ haben) durch x == x Prüfung nachgewiesen werden (es für jede endliche Zahl für NaN und true false ist).