x = "Natürliche Zahl" ???
-
Hi!
Wie kann man bei C / C++ dem Programm sagen, dass x, bzw jede andere Variable, eine natürliche Zahl, also keine Komma-Zahl ist? Allerdings soll es immer noch eine negative Zahl sein können...
So was wiex = natürlich;
oder so was wäre am besten
MfG,
Isch
-
Ich verstehe jetzt nicht, worauf du hinaus willst
Du kannst x als Ganzzahl-Variable definieren (für "natürliche Zahlen" auch vorzeichenlos = unsigned), z.B. "int x;" (Standardgröße) oder "long x;" (idR etwas größer).
Oder du kannst überprüfen, ob eine Zahl ganzzahlig ist:
double x; //... if(x==int(x)) cout<<x<<" ist ganzzahlig\n"; else cout<<x<<" ist reelle Zahl\n";
-
Wie kann man bei C / C++ dem Programm sagen, dass x, bzw jede andere Variable, eine natürliche Zahl, also keine Komma-Zahl ist? Allerdings soll es immer noch eine negative Zahl sein können...
Negative Natürliche Zahlen? Witzbold
-
Folgender sauberer Code prüft bei einem Double-Wert, ob es sich um eine natürliche oder keine natürliche Zahl handelt.
bool IsNatural(const double &dValue) { int nValue = static_cast<int>(dValue); bool bRet = false; if(dValue - static_cast<double>(nValue) == 0) { bRet = true; } return bRet; }
-
-
ChrisPlusPlus schrieb:
Folgender sauberer Code prüft bei einem Double-Wert, ob es sich um eine natürliche oder keine natürliche Zahl handelt.
Demnach ist bei mir 6 Milliarden (6e9) keine natürliche Zahl. -2 allerdings schon.
-
Folgender sauberer Code
-
ChrisPlusPlus schrieb:
(const double &dValue)
-
Freak_Coder schrieb:
ChrisPlusPlus schrieb:
(const double &dValue)
wurde schon auf wtf hingewiesen, ach ja weiter oben^^
-
Dann nehmt eben statt int long ihr Klugscheißer
-
man könnte auch auf Bitebene die Mantisse untersuchen
-
(const double &dValue) ist sauberer Code
Paellon und Freak_Coder ihr kennt nicht den tieferen Sinn dieser Art der Parametrisierung nicht? Hmm
-
Pellaeon schrieb:
wurde schon auf wtf hingewiesen, ach ja weiter oben^^
-
ChrisPlusPlus schrieb:
(const double &dValue) ist sauberer Code
Paellon und Freak_Coder ihr kennt nicht den tieferen Sinn dieser Art der Parametrisierung nicht? Hmm
Ääääh, Nein!
Dann sag uns mal bitte den tieferen Sinn...
Da bin ich aber mal gespannt ![wur]
-
Nun, so legt der Copykonstuktor bei jedem Parameter eine Kopie des Typs oder Objektes an. Diesen zum Teil performancefressende Umstand wird durch die Referenz-Operator entgegen gewirkt. Daß aber die Referenz nicht überschrieben werden kann, wird sie einfach als Konstant festgelegt.
Desweiteren empfiehlt Scott Meyers wann immer möglich const zu verwenden. Das erhöht die Lesbarkeit von code und macht ihn mit unter auch fehlerresistenter!
QED, meine Herren
-
ChrisPlusPlus schrieb:
Nun, so legt der Copykonstuktor bei jedem Parameter eine Kopie des Typs oder Objektes an. Diesen zum Teil performancefressende Umstand wird durch die Referenz-Operator entgegen gewirkt. Daß aber die Referenz nicht überschrieben werden kann, wird sie einfach als Konstant festgelegt.
Bei einem eingebauten Typ wie double ???
Du werwechselst da was mit Objekten...(double dValue)
hätte vollkommen gereicht.
-
Bei double selbstverständlich nicht! Benutzerdefinierte Typen (structs udgl.!)
(double &dValue) ... reicht technisch selbstverständlich auch, ist aber aus besagten Gründen unsauber!
-
ChrisPlusPlus schrieb:
Dann nehmt eben statt int long ihr Klugscheißer
Bei mir sind int und long gleich groß. Selbst wenn das nicht so wäre, ist es nur Schmerzverlagerungstherapie. Nimm einfach irgendeinen Wert, der außerhalb des Wertebereichs des größten Ganzzahltyps auf deiner Plattform liegt, und schon funktioniert deine Funktion nicht mehr. Und was ist mit den negativen Zahlen?
P.S.: Mit deiner Ausdrucksweise wirst du hier viele Freunde finden.
-
ChrisPlusPlus schrieb:
Bei double selbstverständlich nicht!
Und wieso schreibst du das dann ...
-
Tut mir leid! Nun, ich fand diesen Einwand einfach nur doof! Man ist eben nur auf ein bestimmtes Intervall von Werten beschränkt, da hilft auch kein 16-Byte long uder ähnliches! Wäre es nicht das C++-Forum, hätte ich ASSERT selbstverständlich vorgeschlagen.