C++1z 浮動小数点数の16進数リテラル

C++1zから、浮動小数点数リテラルを16進数で表記できるようになります。

たとえば、IEEE 754で定められている、単精度浮動小数点数の正の正規化数のうち最小の値である2-126は、10進数表現では1.17549e-38fですが、16進数で表記すれば0x1.0p-126fのように書きやすくなります。

#include <iostream>
#include <limits>

int main()
{
    std::cout << std::numeric_limits<float>::min() << std::endl; // ライブラリ機能で最小値を取得
    std::cout << 0x1.0p-126f << std::endl; // リテラルで最小値を直接表記する
    std::cout << std::hexfloat << 0x1.0p-126f << std::endl; // 16進数表記で出力
}

出力:

1.17549e-38
1.17549e-38
0x1p-126

標準ライブラリへの追従

C++11時点で、標準ライブラリでも浮動小数点数の16進数表現を扱ういくつかの機能がありました。

今回の機能追加は、ライブラリに言語機能が追従した形になります。

構文

浮動小数点数の16進数表現は、以下の構文になります:

  1. 頭に0xもしくは0Xを付ける (意味的な違いはない)
  2. 仮数
    1. 16進数の値
    2. 小数点 (仮数部の小数点数以下は省略可)
    3. 16進数の値
  3. 指数部
    1. p
    2. 符号 (+-か指定なし)
    3. 10進数の指数
  4. 浮動小数点数の型を決めるサフィックス

また、浮動小数点数の16進数リテラルもまた、ユーザー定義浮動小数点数リテラルの対象となります。

参照

お断り

この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。