Floating point literal defines a compile-time constant whose value is specified in the source file.
Syntax
Floating-point literals have two syntaxes. The first one consists of the following parts:
- nonempty sequence of decimal digits containing a decimal point character (defines significand)
- (optional)
e
orE
followed with optional minus or plus sign and nonempty sequence of decimal digits (defines exponent) - (optional) a suffix type specifier as a
l
,f
,L
orF
The second one consists of the following parts:
- nonempty sequence of decimal digits (defines significant)
-
e
orE
followed with optional minus or plus sign and nonempty sequence of decimal digits (defines exponent) - (optional) a suffix type specifier as a
l
,f
,L
orF
The suffix type specifier defines the actual type of the floating-point literal:
- (no suffix) defines
double
-
f F
definesfloat
-
l L
defineslong double
Optional single quotes(' ) can be inserted between the digits as a separator, they are ignored when compiling. | (since C++14) |
Explanation
A decimal scientific notation is used, meaning that the exponent is the power of 10 by which the significant is multiplied.
The mathematical meaning of 123e4
is 123×104.
Example
#include <iostream> int main() { std::cout << 123.456e-67 << '\n' << .1E4f << '\n' << 58. << '\n' << 4e2 << '\n'; }
Output:
1.23456e-65 1000 58 400
Notes
The hexadecimal floating-point constants (e.g. 0x1p-5
, 0x1.0Ap-2
, 0x1.8p-1
), which are allowed in the C programming language, cannot be used as floating point literals in C++ (although some C++ compilers might interpret them). However, they may be parsed and printed by the I/O functions: both C++ I/O streams when std::hexfloat
is enabled and the C I/O streams: std::printf
, std::scanf
, etc. See std::strtof
for the format description.
Please login to continue.