Ganzzahlüberprüfung
-
Hallo gibt es in C die Möglichkeit ob in einer double Variable eine Ganzzahl gespeichert ist?
-
bool is_integer( double x ) { return ( ( (int) x ) == x ); }
Greetz, Swordfish
-
zu beachten gilt dabei, dass fliesskommazahlen immer nur naeherungsweise angegeben werden koennen (liegt daran dass es unendlich viele rationale zahlen gibt die man in endlich viel speicher darstellen will, das beisst sich halt ;))
so dass ein == uU nicht das beste ist, lieber testen ob es nicht zwischen
x-0.001 und x+0.001 liegt
und das dann als ganzzahl anzusehen...
-
wozu willst du das wissen?
-
@Shade: mein Vorschlag erkennt sogar 0.9999999999999999 noch als NICHT Ganzzahl. Was ist daran so schlimm?
Greetz, Swordfish
-
ideen:
fabs(a-b) < epsilon
fabs(fmod(x, 1.0)) < epsilon
double i; fabs(modf(x, &i)) < epsilonepsilon ist eine kleine zahl.
-
Swordfish schrieb:
@Shade: mein Vorschlag erkennt sogar 0.9999999999999999 noch als NICHT Ganzzahl. Was ist daran so schlimm?
nix. sofern man das will.
aber wie gesagt, double ist oft nicht 100% genau und wenn du laengere rechnungen hast dann kann ganz schnell mal 3.000000000000000000000001 statt exakt 3 rauskommen... und da will man uU dann doch lieber das als ganzzahl sehen... je nachdem was man will, jedenfalls ist es etwas was man bedenken muss.
-
floor(x) == x
ist die einfachste Lösung. Den Cast würde ich nicht empfehlen, weil int und double ganz einach unterschiedliche Wertebereiche haben.