名前空間
変種
操作

浮動小数点リテラル

提供: cppreference.com
< cpp‎ | language
 
 
C++言語
一般的なトピック
フロー制御
条件付き実行文
繰り返し文 (ループ)
ジャンプ文
関数
関数宣言
ラムダ関数宣言
inline 指定子
例外指定 (非推奨)
noexcept 指定子 (C++11)
例外
名前空間
指定子
decltype (C++11)
auto (C++11)
alignas (C++11)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点
文字 - 文字列 - nullptr (C++11)
ユーザ定義 (C++11)
ユーティリティ
属性 (C++11)
typedef 宣言
型エイリアス宣言 (C++11)
キャスト
暗黙の変換 - 明示的な変換
static_cast - dynamic_cast
const_cast - reinterpret_cast
メモリ確保
クラス
クラス固有の関数特性
特別なメンバ関数
テンプレート
その他
 
一般
値カテゴリ (lvalue, rvalue, xvalue)
評価順序 (副作用完了点)
定数式
未評価式
一次式
ラムダ式(C++11)
リテラル
整数リテラル
浮動小数点リテラル
ブーリアンリテラル
文字リテラル および エスケープシーケンス
文字列リテラル
ヌルポインタリテラル(C++11)
ユーザ定義リテラル(C++11)
演算子
代入演算子: a=b, a+=b, a-=b, a*=b, a/=b, a%=b, a&=b, a|=b, a^=b, a<<=b, a>>=b
インクリメントとデクリメント: ++a, --a, a++, a--
算術演算子: +a, -a, a+b, a-b, a*b, a/b, a%b, ~a, a&b, a|b, a^b, a<<b, a>>b
論理演算子: a||b, a&&b, !a
比較演算子: a==b, a!=b, a<b, a>b, a<=b, a>=b, a<=>b(C++20)
メンバアクセス演算子: a[b], *a, &a, a->b, a.b, a->*b, a.*b
その他の演算子: a(...), a,b, a?b:c
デフォルト比較(C++20)
演算子の代替表現
優先順位と結合性
畳み込み式(C++17)
new 式
delete 式
throw 式
alignof
sizeof
sizeof...(C++11)
typeid
noexcept(C++11)
演算子オーバーロード
変換
暗黙の変換
const_cast
static_cast
reinterpret_cast
dynamic_cast
明示的な変換 (T)a, T(a)
ユーザ定義変換
 

浮動小数点リテラルは値がソースファイル内で指定されるコンパイル時定数を定義します。

目次

[編集] 構文

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。 この場合、指数は必須です。 1e101e-5L など。
2) 小数点付きの整数を表す digit-sequence。 この場合、指数は任意です。 1.1.e-2 など。
3) 小数を表す digit-sequence。 指数は任意です。 3.14.1f0.1e-1L など。
4) 小数点なしの整数を表す16進の digit-sequence。 16進浮動小数点リテラルの場合、指数は必須です。 0x1ffp100X0p-1 など。
5) 小数点付きの整数を表す16進の digit-sequence。 16進浮動小数点リテラルの場合、指数は必須です。 0x1.p00xf.p-1 など。
6) 小数点付きの小数を表す16進の digit-sequence。 16進浮動小数点リテラルの場合、指数は必須です。 0x0.123p-10xa.bp10l など。

exponent は以下の形式を持ちます。

e | E exponent-sign(オプション) digit-sequence (1)
p | P exponent-sign(オプション) digit-sequence (2) (C++17およびそれ以降)
1) 10進浮動小数点リテラル用の指数構文。
2) 16進浮動小数点リテラル用の指数構文。

exponent-sign+ または - のいずれかです (存在する場合)。

suffixfFl または L のいずれかです (存在する場合)。 接尾辞は浮動小数点リテラルの型を決定します。

  • 接尾辞なし ー double
  • f または Ffloat
  • l または Llong double
区切り文字として数字の間に任意にシングルクォート (') を挿入できます。 これらはコンパイル時に無視されます。 (C++14およびそれ以降)

[編集] 説明

浮動小数点リテラルの値が10の exponent 乗によって乗算される仮数部であることを意味する、10進科学表記が使用されます。 123e4 の数学的な意味は 123×104 です。

浮動小数点リテラルが文字シーケンス 0x または 0X で始まる場合、その浮動小数点リテラルは16進浮動小数点リテラルです。 そうでなければ、それは10進浮動小数点リテラルです。

16進浮動小数点リテラルの場合、仮数部は16進数の有理数として解釈され、指数の digit-sequence は仮数部をスケールしなければならない2の整数乗として解釈されます。

double d = 0x1.2p3; // 2^3によってスケールされる16進数の仮数部1.2 (10進数の1.125)、すなわち9.0
(C++17およびそれ以降)

[編集]

#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::printfstd::scanf など) の両方でです。 書式の説明は std::strtof を参照してください。

[編集] 関連項目

浮動小数点定数C言語リファレンス