floating point literal
Floating point literal defines a compile-time constant whose value is specified in the source file.
Syntax
digit-sequence exponent suffix(optional) | (1) | |
digit-sequence . exponent(optional) suffix(optional) | (2) | |
digit-sequence(optional) . digit-sequence exponent(optional) suffix(optional) | (3) | |
0x | 0X hex-digit-sequence exponent suffix(optional) | (4) | (since C++17) |
0x | 0X hex-digit-sequence . exponent suffix(optional) | (5) | (since C++17) |
0x | 0X hex-digit-sequence(optional) . hex-digit-sequence exponent suffix(optional) | (6) | (since C++17) |
1e10
, 1e-5L
1.
, 1.e-2
3.14
, .1f
, 0.1e-1L
0x1ffp10
, 0X0p-1
0x1.p0
, 0xf.p-1
0x0.123p-1
, 0xa.bp10l
The exponent has the form.
e | E exponent-sign(optional) digit-sequence | (1) | |
p | P exponent-sign(optional) digit-sequence | (2) | (since C++17) |
exponent-sign, if present, is either +
or -
suffix, if present, is one of f
, F
, l
, or L
. The suffix determines the 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
Decimal scientific notation is used, meaning that the value of the floating-point literal is the significand mutiplied by the number 10 raised to the power of exponent. The mathematical meaning of 123e4
is 123×104.
If the floating literal begins with the character sequence For a hexadecimal floating literal, the significand is interpreted as a hexadecimal rational number, and the digit-sequence of the exponent is interpreted as the integer power of 2 to which the significand has to be scaled. double d = 0x1.2p3; // hex fraction 1.2 (decimal 1.125) scaled by 2^3, that is 9.0 | (since C++17) |
Example
#include <iostream> int main() { std::cout << 58. << '\n' << 4e2 << '\n' << 123.456e-67 << '\n' << .1E4f << '\n' << 0x10.1p0 << '\n'; }
Output:
58 400 1.23456e-65 1000 16.0625
Notes
The hexadecimal floating-point literals were not part of C++ until C++17, although they can be parsed and printed by the I/O functions since C++11: 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.
See also
user-defined literals | literals with user-defined suffix (C++11) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/language/floating_literal