浮動小数点リテラル
提供: cppreference.com
浮動小数点リテラルは値がソースファイル内で指定されるコンパイル時定数を定義します。
目次 |
[編集] 構文
digit-sequence exponent suffix(オプション) | (1) | ||||||||
digit-sequence . exponent(オプション) suffix(オプション)
|
(2) | ||||||||
digit-sequence(オプション) . digit-sequence exponent(オプション) suffix(オプション)
|
(3) | ||||||||
0x | 0X hex-digit-sequence exponent suffix(オプション)
|
(4) | (C++17以上) | |||||||
0x | 0X hex-digit-sequence . exponent suffix(オプション)
|
(5) | (C++17以上) | |||||||
0x | 0X hex-digit-sequence(オプション) . hex-digit-sequence exponent suffix(オプション)
|
(6) | (C++17以上) | |||||||
1) 小数点なしの整数を表す digit-sequence。 この場合、指数は必須です。 1e10、 1e-5L など。
2) 小数点付きの整数を表す digit-sequence。 この場合、指数は任意です。 1.、 1.e-2 など。
3) 小数を表す digit-sequence。 指数は任意です。 3.14、 .1f、 0.1e-1L など。
4) 小数点なしの整数を表す16進の digit-sequence。 16進浮動小数点リテラルの場合、指数は必須です。 0x1ffp10、 0X0p-1 など。
5) 小数点付きの整数を表す16進の digit-sequence。 16進浮動小数点リテラルの場合、指数は必須です。 0x1.p0、 0xf.p-1 など。
6) 小数点付きの小数を表す16進の digit-sequence。 16進浮動小数点リテラルの場合、指数は必須です。 0x0.123p-1、 0xa.bp10l など。
exponent は以下の形式を持ちます。
e | E exponent-sign(オプション) digit-sequence
|
(1) | ||||||||
p | P exponent-sign(オプション) digit-sequence
|
(2) | (C++17以上) | |||||||
1) 10進浮動小数点リテラル用の指数構文。
2) 16進浮動小数点リテラル用の指数構文。
exponent-sign は +
または -
のいずれかです (存在する場合)。
suffix は f
、 F
、 l
または L
のいずれかです (存在する場合)。 接尾辞は浮動小数点リテラルの型を決定します。
- 接尾辞なし ー double
-
f
またはF
ー float -
l
またはL
ー long double
区切り文字として数字の間に任意にシングルクォート (') を挿入できます。 これらはコンパイル時に無視されます。 | (C++14以上) |
[編集] 説明
浮動小数点リテラルの値が10の exponent 乗によって乗算される仮数部であることを意味する、10進科学表記が使用されます。 123e4 の数学的な意味は 123×104 です。
浮動小数点リテラルが文字シーケンス 16進浮動小数点リテラルの場合、仮数部は16進数の有理数として解釈され、指数の digit-sequence は仮数部をスケールしなければならない2の整数乗として解釈されます。 double d = 0x1.2p3; // 2^3によってスケールされる16進数の仮数部1.2 (10進数の1.125)、すなわち9.0 |
(C++17以上) |
[編集] 例
Run this code
#include <iostream> int main() { std::cout << 58. << '\n' << 4e2 << '\n' << 123.456e-67 << '\n' << .1E4f << '\n' << 0x10.1p0 << '\n'; }
出力:
58 400 1.23456e-65 1000 16.0625
[編集] ノート
16進浮動小数点リテラルは C++17 までは C++ の一部ではありませんでしたが、入出力関数では C++11 以降パースしたり表示したりできました。 C++ の入出力ストリーム (std::hexfloat が有効なとき) と C の入出力ストリーム (std::printf、 std::scanf など) の両方でです。 書式の説明は std::strtof を参照してください。
[編集] 関連項目
ユーザ定義リテラル(C++11) | ユーザ定義の接尾辞を持つリテラル |
浮動小数点定数 の C言語リファレンス
|