[gelöst] NaN gesucht
-
Hi,
weiß jemand, wo ich eine NaN Konstante herbekomme, die ich im Fehlerfall z.B. in einer Funktion, die normalerweise ein double zurückgibt, zurückgeben kann?
-
ich glaub das wird schwer da das ja dann 2 unterschiedliche datentypen sind und das bekommst immer schlecht raus schöner ist es in so einem fall das double als zeiger zu übergeben und einen int return für den status der header schaut dann so aus
int myFn(double *ret){ *ret = 10.10; return 1; }
oder du bist einer von der harten truppe
und machst sowas
typedef struct _myDataType{ int type; void *data; }myDataType; myDataType myFn(double ret){ }
-
In math.h gibt es ein Makro
NAN
. Ich weiß leider nicht, ob das C99-spezifisch ist.
-
NAN ist eine GNU-Extension.
Was hälst du von #define NOTANUMBER 1.0/0.0 oder so ähnlich?
-
1.0/0.0 wäre inf, nan wäre 0.0/0.0 (z.B.)
-
hui da fällt mir gerade ein wenn du nen zeiger auf ein double zurück gibst geht das schön und sauber mit ner 0...
also
double *myFn(double *in){ if(ok) return in; return NULL;//aka NaN }
lg lolo
-
Edit: Eieiei... Hab mich im Forum geirrt
-
@freakycpp
kannst du den c++ scheiss woanders posten. die fragen werden nicht umsonst in einem c-unterforum gestellt
-
Ich hatte es schon editiert, was willst du? Man hat nur gesehen das es in C++ besser lösbar ist...
-
Tim schrieb:
...nan wäre 0.0/0.0 (z.B.)
brauchst aber 'nen doofen compiler, der nicht merkt, dass du durch 0 teilen willst. vielleicht so:
// nur fuer little endian unsigned char nan[] = {0, 0, 0, 0, 0, 0, 0xf8, 0x7f}; double f = *(double*)nan; printf ("%f\n", f);
-
nwp2 schrieb:
NAN ist eine GNU-Extension.
Nein, NAN steht im C99-Standard. Ich hab nur den C89-Standard nicht, den kriegt man auch nicht mehr (oder? weiß jemand wo? Draft reicht), deshalb hab ich nachgefragt.
-
Bashar schrieb:
nwp2 schrieb:
NAN ist eine GNU-Extension.
Nein, NAN steht im C99-Standard. Ich hab nur den C89-Standard nicht, den kriegt man auch nicht mehr (oder? weiß jemand wo? Draft reicht), deshalb hab ich nachgefragt.
http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_14.html
[...]Macro: double NAN
An expression representing a value which is "not a number". This macro is a GNU extension [...]Ich habe einfach von da abgeschrieben. Vielleicht haben es auch die Chemiker der FU-Berlin verpeilt.
-
Super,
0.0/0 klappt. GCC beschwert sich allerdings (aber nur warnung). Über 0.0/0.0 beschwert er sich aber nicht
unsigned char nan[] = {0, 0, 0, 0, 0, 0, 0xf8, 0x7f};
double f = (double)nan;auch!
Vielen Dank!
-
nwp2 schrieb:
Ich habe einfach von da abgeschrieben. Vielleicht haben es auch die Chemiker der FU-Berlin verpeilt.
Warum nicht einfach eine Textsuche durch den Standard? Hat schon viele Klarheiten beseitigt.
NAN
gibt's wirklich. Was nicht heissen muss, dass die Chemiker gelogen haben. Vielleicht hatten sie ja damals recht.