Floating-point literal
浮動小数点リテラルは、ソースファイル内で値が指定されるコンパイル時定数を定義します。
目次 |
構文
| digit-sequence decimal-exponent suffix (任意) | (1) | ||||||||
digit-sequence
.
decimal-exponent
(任意)
suffix
(任意)
|
(2) | ||||||||
digit-sequence
(任意)
.
digit-sequence
decimal-exponent
(任意)
suffix
(任意)
|
(3) | ||||||||
0x
|
0X
hex-digit-sequence
hex-exponent
suffix
(任意)
|
(4) | (C++17以降) | |||||||
0x
|
0X
hex-digit-sequence
.
hex-exponent
suffix
(任意)
|
(5) | (C++17以降) | |||||||
0x
|
0X
hex-digit-sequence
(任意)
.
hex-digit-sequence
hex-exponent
suffix
(任意)
|
(6) | (C++17以降) | |||||||
decimal-exponent は次の形式を持ちます
e
|
E
指数符号
(オプション)
数字列
|
|||||||||
hex-exponent は以下の形式を持ちます
p
|
P
指数記号
(オプション)
数字列
|
(C++17以降) | ||||||||
exponent-sign
が存在する場合、
+
または
-
のいずれかです
サフィックス
が存在する場合、それは
f
、
l
、
F
、
L
、
f16
、
f32
、
f64
、
f128
、
bf16
、
F16
、
F32
、
F64
、
F128
、
BF16
(C++23以降)
のいずれかです。サフィックスは浮動小数点リテラルの型を決定します:
-
- (接尾辞なし)は double を定義します
-
f Fは float を定義します -
l Lは long double を定義します
|
(C++23以降) |
|
オプションの単一引用符 ( ' ) を数字の間に区切り文字として挿入できます。これらはリテラルの値を決定する際に無視されます。 |
(C++14以降) |
説明
10進数の科学的表記法が使用され、浮動小数点リテラルの値は仮数部に10の decimal-exponent 乗を掛けた値となる。例えば、 123e4 の数学的な意味は 123×10 4 である。
|
浮動小数点リテラルが文字シーケンス
16進浮動小数点リテラル の場合、仮数部は16進有理数として解釈され、指数部の digit-sequence は仮数部をスケーリングするための2の(10進)整数乗として解釈されます。
double
d
=
0x1.4p3
;
|
(C++17以降) |
注記
16進浮動小数点リテラルはC++17までC++の一部ではありませんでしたが、C++11以降はI/O関数で解析および出力可能です: std::hexfloat が有効な場合のC++ I/Oストリームと、C I/Oストリーム: std::printf 、 std::scanf など。書式の詳細については std::strtof を参照してください。
| 機能テストマクロ | 値 | 規格 | 機能 |
|---|---|---|---|
__cpp_hex_float
|
201603L
|
(C++17) | 16進浮動小数点リテラル |
例
#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 }
出力例:
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
参考文献
- C++23標準 (ISO/IEC 14882:2024):
-
- 5.13.4 浮動小数点リテラル [lex.fcon]
- C++20標準 (ISO/IEC 14882:2020):
-
- 5.13.4 浮動小数点リテラル [lex.fcon]
- C++17標準 (ISO/IEC 14882:2017):
-
- 5.13.4 浮動小数点リテラル [lex.fcon]
- C++14標準 (ISO/IEC 14882:2014):
-
- 2.14.4 浮動小数点リテラル [lex.fcon]
- C++11標準 (ISO/IEC 14882:2011):
-
- 2.14.4 浮動小数点リテラル [lex.fcon]
- C++98標準 (ISO/IEC 14882:1998):
-
- 2.13.3 浮動小数点リテラル [lex.fcon]
関連項目
| ユーザー定義リテラル (C++11) | ユーザー定義サフィックスを持つリテラル |
|
Cドキュメント
for
浮動小数点定数
|
|