Überprüfung ob Ganzzahl
-
Hallo,
ich bin gerade dabei die obligatorische Taschenrechnerübung zu programmieren. Soweit funtkioniert auch alles ganz gut, jedoch habe ich folgendes Problem:Die Fakultätenrechnung ist nur für natürliche Zahlen definiert. Ich habe leider keine Idee, wie ich realisieren kann, dass vor der Fakultätsberechnung überprüft wird, ob es sich wirklich um eine natürlich Zahl handelt.
Darum bitte ich, um einen kleinen denkanstoß
Danke!
Mfg Dennis
-
wie wäre es mit:
float f; ... if(f-static_cast<int>(f) == 0) //Natürliche ZahlOder du castest es direkt nach int.
-
Du kannst gleich integers einlesen, oder wenn du schon Fließkommazahlen vorliegen hast, kannst du einfach nach int casten. Natürlich ist die Zahl dann, wenn sie größer als 0 ist.
-
vielen dank - hat mit der if-abfrage geklappt!
-
Bää das ist aber falsch
Dafür ist die genauigkeit einer Fließkommerzahl(float) zu gering. Guck mal bei cplusplus-forum.de ... da hat 0xdeadbeefy mal eine sehr nette Lösung des Problems gegeben 
-
f==floor(f)
f==ceil(f)
fmod(f,1)==0
-
(D)Evil schrieb:
Bää das ist aber falsch
Dafür ist die genauigkeit einer Fließkommerzahl(float) zu gering. Guck mal bei cplusplus-forum.de ... da hat 0xdeadbeefy mal eine sehr nette Lösung des Problems gegeben 
Mit einem 32-Bit-float kann man alle natürlichen Zahlen bis ~2^24 exakt darstellen. Was ist hier nun das Problem?
-
bool ungerade= ((long)f) < f ? false : true;
-
true/false vertauscht und funzt nicht mit negativen f.
Edit: "ungerade" ist hier ja eh der total falsche Bezeichner...
-
BorisDieKlinge schrieb:
bool ungerade= ((long)f) < f ? false : true;bool ungerade = (static_cast<long>(f) & 1) == 1;
-
bool ungerade =(f & 1)
-
BorisDieKlinge schrieb:
bool ungerade =(f & 1)vielleicht bist du lieber still, bevor du dich vollends zum affen machst.
-
tzz schrieb:
BorisDieKlinge schrieb:
bool ungerade =(f & 1)vielleicht bist du lieber still, bevor du dich vollends zum affen machst.
Dafür ists schon lange zu spät

-
du vogel...
wollte damit sagen das deine option nich geht;)
