2013-10-01 28 views
6

Ich bin ziemlich neu in Lua. Während des Testens entdeckte ich #INF/#IND. Ich kann jedoch keine gute Referenz finden, die das erklärt.In Lua, was ist #INF und #IND?

Was sind #INF, #IND und ähnliche (wie Negative) und wie generieren und verwenden Sie diese?

+1

'1/0 ',' -1/0' und '0/0' –

+0

Ihre Lua bauen müssen Gleitkommatyp für Lua 'number' Typ verwenden . (Der Standard-Lua-Build verwendet den C-Double-Typ.) Siehe [Was jeder Computerwissenschaftler über Gleitkommaarithmetik wissen sollte] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg .html) von David Goldberg. –

Antwort

7

#INF ist unendlich, #IND ist NaN. Geben Sie ihm einen Test:

print(1/0) 
print(0/0) 

Ausgabe auf meinem Windows-Rechner:

1.#INF 
-1.#IND 

Da es für diese in ANSI C keine Standarddarstellung ist, können Sie verschiedene Ergebnis. Zum Beispiel:

inf 
-nan 
+1

'-1. # IND' ist ein bestimmtes NaN-Muster, das als" INDEFINITE "bekannt ist. Das Bitmuster für die Version mit doppelter Genauigkeit lautet "0xfff800000000000". – njuffa

6

Erweitern @YuHao bereits gute Antwort.

Lua tut wenig, wenn eine Zahl in eine Zeichenfolge konvertiert wird, da sie sich stark auf die zugrunde liegende C-Bibliotheksimplementierung stützt. In der Tat ruft Lua print implementation Lua tostring, die wiederum (nach einer Reihe von anderen Anrufen) verwendet lua_number2str macro, die in Bezug auf C sprintf definiert ist. So sehen Sie am Ende, welche Repräsentation für Unendlichkeiten und NaNs die C-Implementierung verwendet (dies kann variieren, je nachdem, welcher Compiler zum Kompilieren von Lua verwendet wurde und mit welcher C-Laufzeit Ihre Anwendung verknüpft ist).

2

@YuHao hat bereits darauf hingewiesen, was bedeutet +/- 1. # INF (+ -inf) und -1. # IND (Nan), so werde ich nur hinzufügen, wie man damit umgeht (was ich gerade brauchte in Lua):

  • "inf" (+/- 1. # INF) sind die höhere Anzahl Werte, die (Lua/C) darstellen kann und die Sprache sieht vor, dass konstant für Sie: "math.huge". So können Sie eine Zahl innerhalb von Lua für + -INF testen; Die Funktion "isINF()" unten zeigt, wie man es benutzt.
  • "nan" (- 1. # IND) ist etwas, das nicht numerisch behandelt werden kann: es sollte eine Zahl sein, es ist nicht, und alles, was Sie damit tun, ist alles andere als eine Zahl auch. Denken Sie daran, dass kein NaN dem anderen NaN gleich ist; überprüfe auf NaN wie die Funktion "isNAN()" unten.

local function isINF(value) 
    return value == math.huge or value == -math.huge 
end 

local function isNAN(value) 
    return value ~= value 
end