float zu double und anders herum - Standard?
-
Hi.
Ich wollte mal wissen ob im Standard folgendes Verhalten wohldefiniert ist:float myFloat = static_cast<float>(myDouble); // und anders herumUnd für die Zukunft: Wie finde ich so etwas mal selber raus? Wie soll ich in de(m|n) Dokument(en) gerade die Stelle finden, die das definiert?
Gruß
-
Nein:
C++ Standard schrieb:
Floating point conversions
An rvalue of floating point type can be converted to an rvalue of another floating point type. If the source value can be exactly represented in the destination type, the result of the conversion is that exact representation. If the source value is between two adjacent destination values, the result of the conversion is an implementation-defined choice of either of those values. Otherwise, the behavior is undefined.
The conversions allowed as floating point promotions are excluded from the set of floating point conversions.
[...]
Floating point promotion
An rvalue of type float can be converted to an rvalue of type double. The value is unchanged.
This conversion is called floating point promotion.theliquidwave schrieb:
Und für die Zukunft: Wie finde ich so etwas mal selber raus? Wie soll ich in de(m|n) Dokument(en) gerade die Stelle finden, die das definiert?
Im Inhaltsverzeichnis? Ich denke die Überschrift "Standard conversions: Floating point conversions" ist doch recht aussagekräftig.
Ansonsten: Überfliege einmal den Standard. Dann weißt du, was ungefähr wo steht. Versuche Fragen zum Standard die hier im Forum gestellt werden selbstständig zu beantworten. Und sei es durch Volltextsuche, wenn du im Inhaltsverzeichnis nichts findest. Dann findest du dich nach kurzer Zeit zumindest grob im Standard zurecht.
(Wobei ich zugeben muss, dass einige Sachen im Standard nur sehr obskur und indirekt definiert werden. Paradebeispiel für etwas schwer zu findendes ist meiner Meinung nach die Mindestgröße der integralen Typen.)
-
Das "Otherwise, the behavior is undefined" bezieht sich nur auf den Fall, in dem sich der
double-Wert ausserhalb desfloat-Wertebereichs befindet und deshalb nicht zwischen zwei benachbarten möglichenfloat-Repräsentationen liegt. Sonst (und mit dem Fall hat man wohl am meisten zu tun) wird die Konversion klappen.
-
Dann habe ich ja Glück gehabt. Es geht bei mir nur um Werte zwischen -1.0 und max. 10000.0 - das sollte ja problemlos hinhauen

Gruß und Danke
-
Ach so, es geht nur darum, ob es überhaupt funktioniert. Ich hatte gedacht es ginge darum, ob das exakte Ergebnis definiert wäre (Was es nicht unbedingt ist. Siehe oben).
-
Jupp. Genauigkeit spielt eigentlich gar keine Rolle. Hauptsache aus -1.0 wird nicht 200.0
Gruß