Einfach Frage zu Double in C++
-
Hallo liebe Forengemeinde,
ich habe eine einfach Frage bzgl. eines Doubles:
In verschiedenen Quelltexten stoße ich immer wieder auf Dinge wie
const double DefaultScale = 0.00403897f;
Ich habe schon etwas gegooglet bin aber nicht fündig geworden. Wofür steht das "f" am Ende der Zahl? Für float? Was gibt es an und geht das auch bei anderen Typen?Hoffe ihr könnt mir helfen
-
Richtig, es ist ein Suffix um zu zeigen, dass es sich um ein float-literal handelt. Ansonsten würde es als double interpretiert.
Es gibt noch weitere solcher Suffixe. U bzw u steht für unsigned, L bzw l steht für long.
Diese können natürlich auch kombiniert werden zu ul.
-
Mit dem f dahinter sagt man dem Compiler, dass es sich um ein float-Literal handelt. Sonst wärs ein double-literal.
const double DefaultScale = 0.00403897f;
Ist also albern, weil der float dann ja doch wieder in ein double konvertiert wird.
Entweder
const double DefaultScale = 0.00403897;
oder
const float DefaultScale = 0.00403897f;
.
Gruß
Dobi
-
schrieb:
const double DefaultScale = 0.00403897f;
Ich habe schon etwas gegooglet bin aber nicht fündig geworden. Wofür steht das "f" am Ende der Zahl? Für float? Was gibt es an und geht das auch bei anderen Typen?Ja, es steht für float. 0.00403897 wäre ein literal vom Typ double, mit dem f hintenan ists ein Literal vom Typ float. Ähnliche suffixe gibts auch für integer-Literale:
u bzw. U steht für unsigned,l bzw. L für long, und zwar sowohl bei int-Literalen als auch bei double-Literalen.
bsp:
10L //long int 0x44uL //unsigned long, hexadezimal 07733lU //unsigned long, oktal (hier sieht man, dass man das l besser als L schreiben sollte) 0.445L //long double 4e3f //float
-
Ok danke für die Klärung
Immer wieder erfreut, wie schnell man in diesem Forum gute Antworten bekommt
-
Und
LL
steht fürlong long
. Ist auch wieder mitU
kombinierbar, alsoULL
istunsigned long long
.(unsigned) long long
gibt's im C++ 03 Standard nicht, ist aber eine sehr übliche Erweiterung. Und IIRC Teil von C++0x.
-
hustbaer schrieb:
Und
LL
steht fürlong long
. Ist auch wieder mitU
kombinierbar, alsoULL
istunsigned long long
.(unsigned) long long
gibt's im C++ 03 Standard nicht, ist aber eine sehr übliche Erweiterung. Und IIRC Teil von C++0x.Damit kann man variablen richtig füllen oder auf Null setzen.
x = 0ull; y = 0xFFFFFFFFull;
-
ja schrieb:
Damit kann man variablen richtig füllen oder auf Null setzen.
x = 0ull; y = 0xFFFFFFFFull;
Kann man auch ohne ll. x = 0 tut das gleiche, und 0XFFFFFFFFull garantiert nicht, dass dann alle Bits gesetzt sind - bei sizeof(long long) > 4 haut das nämlich nicht mehr hin. Also lieber mit Standardmitteln arbeiten...
-
pumuckl schrieb:
ja schrieb:
Damit kann man variablen richtig füllen oder auf Null setzen.
x = 0ull; y = 0xFFFFFFFFull;
Kann man auch ohne ll. x = 0 tut das gleiche, und 0XFFFFFFFFull garantiert nicht, dass dann alle Bits gesetzt sind - bei sizeof(long long) > 4 haut das nämlich nicht mehr hin. Also lieber mit Standardmitteln arbeiten...
Ich glaube du hast da einen Witz nicht verstanden (0ull, Full). Oder ich sehe das als Witz an und es war erst gemeint. Ich hoffe für "ja", dass es ersteres ist.
-
ersteres
-
SeppJ schrieb:
Ich glaube du hast da einen Witz nicht verstanden (0ull, Full).
Gnarf. Arbeit macht wohl humorlos -.-
-
Abgesehen davon dass es ein Witz war, kann man damit trotzdem alle Bits einer
unsigned long long
Variable setzen.
Nur sollte mal~0ull
schreiben.