Wie definiert man den NaN-Wert in ANSI C? [Duplikat]

8

Ich schreibe eine Funktion in ANSI C, die zwei Zahlen als Parameter empfängt. Die Parameter lauten int oder float type. Die Nummer kann oder kann nicht gemäß meinem Filter gültig sein. Wie gebe ich einen Wert zurück, der einen Fehler bedeutet? Der Rückgabetyp ist float . Das erste, was mir in den Sinn kam, war der abstrakte Typ NaN . Aber ich weiß nicht, wie ich es in ANSI C darstellen soll.

(Entschuldigung für mein schlechtes Englisch. Englisch ist nicht meine Muttersprache)

    
Jack 05.01.2013, 18:35
quelle

4 Antworten

12

NaN ist kein "abstrakter Typ". Es ist ein Wert eines Fließkomma-Datums.

Wenn Sie unter "ANSI C" Standard C verstehen (was die eigentliche Bedeutung des Begriffs ist, so viel wie er hat), schließen Sie <math.h> ein und verwenden Sie das Makro NAN , um eine Nanometerzahl und% zu erzeugen. co_de%, um eins zu erkennen.

Wenn Sie mit "ANSI C" eigentlich den lang ersetzten C89-Standard meinen (den manche Leute auch dann vorgeben, wenn er nicht formal korrekt ist), können Sie einen NaN-Wert mit isnan(x) erzeugen und mit eins prüfen 0./0. .

    
Stephen Canon 05.01.2013, 18:41
quelle
4
  

Die Frage, die Zahl ist möglicherweise nicht gültig gemäß meinem "Filter dann, wie gebe ich einen Wert zurück, der Störung bedeutet?

Anstatt die Zahl mit NaN zu vergleichen, können Sie dies verwenden:

%Vor%

Wie in den Kommentaren erwähnt, können Sie diesen Ausdruck 0.f / 0.f verwenden, um in C89 einen float NaN-Wert zu erzeugen.

    
ouah 05.01.2013 18:39
quelle
2

Sie können das nicht, Sie benötigen zwei zurückgegebene Variablen, eine für den Wert, eine für das Fehler-Flag.

Sie können z. B. festlegen, dass die Funktion bei normalem Betrieb true zurückgibt. false im Falle eines Fehlers (NaN).

Die Variable, die das Ergebnis speichert, wird als Referenz übergeben und behält den Rückgabewert bei Erfolg bei.

%Vor%     
Paolo 05.01.2013 18:48
quelle
-2

Habe so etwas

%Vor%     
narendranathjoshi 05.01.2013 18:46
quelle

Tags und Links