Floating-point literal
Fließkomma-Literal definiert eine Compile-Zeit-Konstante, deren Wert in der Quelldatei angegeben wird.
Inhaltsverzeichnis |
Syntax
| Ziffernfolge Dezimalexponent Suffix (optional) | (1) | ||||||||
Ziffernfolge
.
Dezimalexponent
(optional)
Suffix
(optional)
|
(2) | ||||||||
Ziffernfolge
(optional)
.
Ziffernfolge
Dezimalexponent
(optional)
Suffix
(optional)
|
(3) | ||||||||
0x
|
0X
Hexadezimale-Ziffernfolge
Hexadezimalexponent
Suffix
(optional)
|
(4) | (since C++17) | |||||||
0x
|
0X
Hexadezimale-Ziffernfolge
.
Hexadezimalexponent
Suffix
(optional)
|
(5) | (since C++17) | |||||||
0x
|
0X
Hexadezimale-Ziffernfolge
(optional)
.
Hexadezimale-Ziffernfolge
Hexadezimalexponent
Suffix
(optional)
|
(6) | (since C++17) | |||||||
decimal-exponent hat die Form
e
|
E
Exponentenzeichen
(optional)
Ziffernfolge
|
|||||||||
hex-exponent hat die Form
p
|
P
Exponentenzeichen
(optional)
Ziffernfolge
|
(seit C++17) | ||||||||
exponent-sign
, falls vorhanden, ist entweder
+
oder
-
Suffix
, falls vorhanden, ist einer von
f
,
l
,
F
,
L
,
f16
,
f32
,
f64
,
f128
,
bf16
,
F16
,
F32
,
F64
,
F128
,
BF16
(seit C++23)
. Der Suffix bestimmt den Typ des Gleitkomma-Literals:
-
- (kein Suffix) definiert double
-
f Fdefiniert float -
l Ldefiniert long double
|
(seit C++23) |
|
Optionale einfache Anführungszeichen ( ' ) können zwischen den Ziffern als Trennzeichen eingefügt werden; sie werden bei der Bestimmung des Werts des Literals ignoriert. |
(since C++14) |
Erklärung
Dezimale wissenschaftliche Notation wird verwendet, was bedeutet, dass der Wert des Gleitkommaliterals die Mantisse multipliziert mit der Zahl 10 hoch decimal-exponent ist. Z.B. ist die mathematische Bedeutung von 123e4 123×10 4 .
|
Wenn das Gleitkomma-Literal mit der Zeichenfolge
Für ein hexadezimales Gleitkomma-Literal wird die Significand als hexadezimale rationale Zahl interpretiert, und die Ziffernfolge des Exponenten wird als (dezimale) ganzzahlige Potenz von 2 interpretiert, mit der die Significand skaliert werden muss.
double
d
=
0x1.4p3
;
|
(since C++17) |
Hinweise
Hexadezimale Gleitkomma-Literale waren bis C++17 nicht Teil von C++, obwohl sie seit C++11 von den E/A-Funktionen geparst und ausgegeben werden können: sowohl C++-E/A-Streams, wenn std::hexfloat aktiviert ist, als auch C-E/A-Streams: std::printf , std::scanf , usw. Siehe std::strtof für die Formatbeschreibung.
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_hex_float
|
201603L
|
(C++17) | Hexadezimale Gleitkommaliterale |
Beispiel
#include <iomanip> #include <iostream> #include <limits> #include <typeinfo> #define OUT(x) '\n' << std::setw(16) << #x << x int main() { std::cout << "Literal" "\t" "Printed value" << std::left << OUT( 58. ) // double << OUT( 4e2 ) // double << OUT( 123.456e-67 ) // double << OUT( 123.456e-67f ) // float, truncated to zero << OUT( .1E4f ) // float << OUT( 0x10.1p0 ) // double << OUT( 0x1p5 ) // double << OUT( 0x1e5 ) // integer literal, not floating-point << OUT( 3.14'15'92 ) // double, single quotes ignored (C++14) << OUT( 1.18e-4932l ) // long double << std::setprecision(39) << OUT( 3.4028234e38f ) // float << OUT( 3.4028234e38 ) // double << OUT( 3.4028234e38l ) // long double << '\n'; static_assert(3.4028234e38f == std::numeric_limits<float>::max()); static_assert(3.4028234e38f == // ends with 4 3.4028235e38f); // ends with 5 static_assert(3.4028234e38 != // ends with 4 3.4028235e38); // ends with 5 // Both floating-point constants below are 3.4028234e38 static_assert(3.4028234e38f != // a float (then promoted to double) 3.4028234e38); // a double }
Mögliche Ausgabe:
Literal Printed value 58. 58 4e2 400 123.456e-67 1.23456e-65 123.456e-67f 0 .1E4f 1000 0x10.1p0 16.0625 0x1p5 32 0x1e5 485 3.14'15'92 3.14159 1.18e-4932l 1.18e-4932 3.4028234e38f 340282346638528859811704183484516925440 3.4028234e38 340282339999999992395853996843190976512 3.4028234e38l 340282339999999999995912555211526242304
Referenzen
- C++23-Standard (ISO/IEC 14882:2024):
-
- 5.13.4 Fließkommaliterale [lex.fcon]
- C++20-Standard (ISO/IEC 14882:2020):
-
- 5.13.4 Fließkommaliterale [lex.fcon]
- C++17-Standard (ISO/IEC 14882:2017):
-
- 5.13.4 Gleitkommaliterale [lex.fcon]
- C++14-Standard (ISO/IEC 14882:2014):
-
- 2.14.4 Gleitkommaliterale [lex.fcon]
- C++11-Standard (ISO/IEC 14882:2011):
-
- 2.14.4 Gleitkommaliterale [lex.fcon]
- C++98-Standard (ISO/IEC 14882:1998):
-
- 2.13.3 Gleitkommaliterale [lex.fcon]
Siehe auch
| benutzerdefinierte Literale (C++11) | Literale mit benutzerdefiniertem Suffix |
|
C-Dokumentation
für
Gleitkommakonstante
|
|