x = "Natürliche Zahl" ???
-
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.
-
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.
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
lol
so, hier mal die assembler-entsprechung für deinen referenz-kram (ein bisschen vereinfacht dargestellt):
by-value:; aufrufer push eax ; argument übergeben ; in der funktion pop eax ; *hust* double hat ja nur 32 bits...
by-reference
; aufrufer push eax ; erstmal auf den stack pushen, weil die register ja überschrieben werden ; ... push ebx + 4 ; adresse übergeben ; funktion pop ebx ; adresse holen mov eax, [ebx] ; wert an adresse in ebx nach eax schreiben
ich hoffe, dass ich mich gerade richtig an mein asm-tut erinnert hab...
das mit dem const stimmt schon, aber const macht alles nur unnötig schwerer bei bult-ins.
-
ChrisPlusPlus schrieb:
Tut mir leid! Nun, ich fand diesen Einwand einfach nur doof!
Der Einwand musste kommen, wenn du mit besonderem Hinweis auf Sauberkeit behauptest, dass dein Code doubles prüft.
Wäre es nicht das C++-Forum, hätte ich ASSERT selbstverständlich vorgeschlagen.
assert gibt's im Standard. #include <cassert>.
-
ChrisPlusPlus schrieb:
Wäre es nicht das C++-Forum, hätte ich ASSERT selbstverständlich vorgeschlagen.
assert wird auch noch in c++ verwendet
<cassert>
-
assert
Asche auf mein Haupt!
Bei mir sind int und long gleich groß.
Bei mir nicht unbedingt! Das ist nämlich Maschinenabhängig! Eines aber trifft immer zu
int <= long
-
terraner: double hat doch normalerweise 80 bits??
-
hmmmmmmmmmm? schrieb:
terraner: double hat doch normalerweise 80 bits??
long double hat 80
zumindest bei mir. double hat 64 bit(bei mir ;))
-
hmmmmmmmmmm? schrieb:
terraner: double hat doch normalerweise 80 bits??
64 bit wie otze schon sagte. ich habe den double im asm-code zur vereinfachung nur mal ein bisschen kleiner gemacht...
-
dann ist es ja doch performanter den double-wert per referenz zu übergeben.
-
DANKE an alle!
-
Um nochmal auf die ursprüngliche Frage zurückzukommen, das mit dem Casten ist aufgrund von Genauigkeitsverlust keine gute Idee. Am besten man verwendet für sowas floor().