floating point literal

From cppreference.com
< cpp‎ | language

Floating point literal defines a compile-time constant whose value is specified in the source file.

Contents

[edit] 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 or E 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 or F

The second one consists of the following parts:

  • nonempty sequence of decimal digits (defines significant)
  • e or E 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 or F

The suffix type specifier defines the actual type of the floating-point literal:

  • (no suffix) defines double
  • f F defines float
  • l L defines long double
Optional single quotes(') can be inserted between the digits as a separator, they are ignored when compiling. (since C++14)

[edit] 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

[edit] Example

#include <iostream>
int main()
{
  std::cout << 123.456e-67 << '\n'
            << .1E4f       << '\n'
            << 58.         << '\n'
            << 4e2         << '\n';
}

Output:

1.23456e-65
1000
58
400

[edit] 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