Abfrage natürliche Zahl?
-
Slin schrieb:
Hab gerade ncoh ne andere idee, weiß aber auch nciht ob das sinnvoller ist:
Caste sie einfach zweimal, erst in einen int, dannw eider zurück zu double, wenn es dann ncoh die glecih ist, dann war sie vorher schon natürlichif (x>0 && (double)((int)x)==x)
das sollte es schon tun
if( x%1 != 0 && x>0)
Oder lieg ich jetzt komplett falsch?
-
xBlackKnightx schrieb:
n * 0 = 0 <-- was hat das für einen Sinn? immer nur Null?
n / 0 = error <-- wozu error? etwas nützliches sollte man rauskratzen!
0 / n = 0 <-- was hat das für einen Sinn?? immer nur Null?
1. n / 0 gibt nan, zumindest bei Fließkommazahlen
2. Äh...das macht sogar ziemlich viel Sinn. Also - auf so ziemlich jede andere Art würde es keinen Sinn machen. Du musst dabei bedenken, dass die 0 nicht immer als Konstante im Code auftaucht. Sehr gut denkbar wäre etwas dieser Art:double d; cin >> d; cout << "Fläche eines Kreises mit Radius " << d << ": " << (3.1415926 * d * d) << endl;
Wenn der User 0 eingibt, gibts halt 0 - und das ist ja auch richtig.
-
the_alien schrieb:
if (x>0 && (double)((int)x)==x)
das sollte es schon tun
if( x%1 != 0 && x>0)
Oder lieg ich jetzt komplett falsch?[/quote]
Zum einen wolltest du glaub ich [cpp]if( x%1 == 0 && x>0)[/cpp] schreiben.
Und, ja das hatte ich acuh erst angedacht, aber da der ModuloOperator nur Sinn für Ganzzahlige Werte macht, sollte er in C/C++ auch nur für Integers definiert sein. Also wird an der Stelle wox%1
steht automatischen nen cast nach (int) gemacht, bevor der Modulooperator Anwendung findet, was jedoch dazu führt, dass
x%1 == 0
immer true ergibt. Und das wäre nicht so hilfreich.
-
Slin schrieb:
Natürlich heißt, wenn ich mich recht erinner größe als Null und keine Stellen hinterm Komma oder.
ich glaub' die 0 gehört dazu
-
net schrieb:
Slin schrieb:
Natürlich heißt, wenn ich mich recht erinner größe als Null und keine Stellen hinterm Komma oder.
ich glaub' die 0 gehört dazu
Laut Wikipedia definitionssache
-
Slin schrieb:
Zum einen wolltest du glaub ich [cpp]if( x%1 == 0 && x>0)[/cpp] schreiben.
Und, ja das hatte ich acuh erst angedacht, aber da der ModuloOperator nur Sinn für Ganzzahlige Werte macht, sollte er in C/C++ auch nur für Integers definiert sein. Also wird an der Stelle wox%1
steht automatischen nen cast nach (int) gemacht, bevor der Modulooperator Anwendung findet, was jedoch dazu führt, dass
x%1 == 0
immer true ergibt. Und das wäre nicht so hilfreich.
Ja, wollte ich
Dann ist die Methode mit dem Doppelcast wohl noch die einfachste.
-
groovemaster schrieb:
Sicher. Sonst noch irgendwelche unsinnigen Vorschläge?
Wieso? Ist doch ne Idee. Gebe aber zu, das ich die aufgabe falsch verstanden habe...
Besser?
double wert; if(wert(int)!=wert){ //keine ganzzahl }else{ //ganzzahl }
-
Du meinst wohl eher
if (int(wert) != wert)
-
hm, alles quatsch ^^
#include <cmath> bool IstGanzzahl(double d) { return d == std::floor(d); }
funktioiniert übrigens für den gesamten bereich von double und
nicht nur für -2^31 bis 2^31-1 (so wie beim int cast)das casten von double in int oder einen anderen integertypen ist generell nicht zu empfehlen und würde ich persönlich immer versuchen zu vermeiden.
MfG
DDR-RAM
-
xBlackKnightx schrieb:
n * 0 = 0 <-- was hat das für einen Sinn? immer nur Null?
Was hat eigentlich Multiplizieren mit 1 für nen Sinn? Kommt ja immer nur der andere Faktor raus. Warum ist das dann erlaubt?
n / 0 = error <-- wozu error? etwas nützliches sollte man rauskratzen!
http://www.c-plusplus.net/forum/viewtopic-var-t-is-77147-and-highlight-is-division.html
0 / n = 0 <-- was hat das für einen Sinn?? immer nur Null?
Ja warum denn nicht?