Zahl auf Vozeichen überprüfen
-
Hallo,
Gibt es eine Funktion mit der ich mit scanf eingelesene double Zahlen auf das Vorzeichen überprüfen kann und wenn ja welche bzw. gibt es andere Möglichkeiten dies zu realisieren?
-VS
-
Meinst du das?
double d; scanf("%lf", &d); if(d < 0) printf("d ist negative\n"); else printf("d ist positiv\n");
-
Viel zu einfach
char *p; if ((p = strchr( zahl, '-')) != NULL) printf( "negativ"); else printf "positiv");
-
gibt es andere Möglichkeiten dies zu realisieren?
Ja.
-
Vielen Dank.
-
supertux schrieb:
Meinst du das?
double d; scanf("%lf", &d); if(d < 0) printf("d ist negative\n"); else printf("d ist positiv\n");
Schaut zwar einfach und richtig aus, ist aber leider nicht ganz richtig. Fließkommazahlen haben halt ihre Macken :). man: signbit(3) wäre die richtige Wahl
Hier mal ein Biespielcode, der das Problem illustriert
#include <math.h> #include <stdio.h> void supertux(double d) { if(d < 0) printf("d ist negative\n"); else printf("d ist positiv\n"); } void mitsignbit(double d) { if(signbit(d)) printf("d ist negativ\n"); else printf("d ist positiv\n"); } int main() { double a = -sqrt(-1.0); double b = sqrt(-1.0); double c = -1.0/0.0; double d = 1.0/0.0; double e = -0.0; double f = 0.0; printf("%f %f %f %f %f %f\n", a, b, c, d, e, f); printf("\nsupertux:\n"); supertux(a); supertux(b); supertux(c); supertux(d); supertux(e); supertux(f); printf("\nmitsignbit:\n"); mitsignbit(a); mitsignbit(b); mitsignbit(c); mitsignbit(d); mitsignbit(e); mitsignbit(f); }
-
rüdiger schrieb:
double a = -sqrt(-1.0);
double b = sqrt(-1.0);
double c = -1.0/0.0;
double d = 1.0/0.0;
double e = -0.0;da kommt doch sowieso nur schrott bei raus. wer braucht denn das vorzeichen von null und irgendwelchen kaputten ergebnissen?
-
rüdiger schrieb:
Schaut zwar einfach und richtig aus, ist aber leider nicht ganz richtig. Fließkommazahlen haben halt ihre Macken :). man: signbit(3) wäre die richtige Wahl
ich hasse Fließkommazahlen, ich dachte schon, dass es nicht 100% richtig war. Aber da ich die Frage des OPs nicht verstand, hab ich mir keine weiteren Gedanken drüber gemacht.