<cfloat>
ヘッダでは、浮動小数点数に関連する定数値マクロを定義する。これは、C言語の標準ライブラリ<float.h>
と同じである。
本ヘッダはフリースタンディング環境でも提供される。
浮動小数点数 $x$ は以下のようにモデル化される。
$$x = sb^e\sum^p_{k=1}f_kb^{-k},\qquad e_{\rm min} \le e \le e_{\rm max}$$
各パラメータは以下の通り。
$$ \begin{array}{ll} s&\text{符号($\pm 1$)}\\ b&\text{指数表現の基数(1 より大きい整数)}\\ e&\text{指数(最小 $e_{\rm min}$ 最大 $e_{\rm max}$ の整数)}\\ p&\text{精度(基数 $b$ での仮数部の桁数)}\\ f_k&\text{$b$ より小さい非負整数(仮数部の有効数字)}\\ \end{array} $$
浮動小数点型で表される値としては、ゼロと $f_1 \gt 0$ である正規化数の他に、$e = e_{\rm min}$ かつ $f_1 = 0$ である非正規化数(subnormal numbers)、$e \gt e_{\rm min}$ かつ $f_1 = 0$ である正規化されていない数(unnormalized numbers)、および、浮動小数点数ではない無限大や NaN 等が含まれているかもしれない(実装によっては含まれていないかもしれない)。
NaN とは非数(Not-a-Number)を表し、ほとんど全ての演算で浮動小数点例外を起こさず結果に伝播する quiet NaN(quiet:静かな)と、演算のオペランドに使用されると浮動小数点例外を引き起こす signaling NaN(signaling:信号を発する)がある。
ゼロと浮動小数点数ではない値(無限大や NaN 等)には符号があるかもしれない(実装によっては無いかもしれない)。
本ヘッダで提供される整数値を表すマクロは、FLT_ROUNDS
を除いて #if
プリプロセッサディレクティブに使用可能な定数式である。
丸め
マクロ | 説明 | 対応バージョン |
---|---|---|
FLT_ROUNDS |
浮動小数点加算の丸めモード |
基数
マクロ | 説明 | 対応バージョン |
---|---|---|
FLT_RADIX |
指数表現の基数。 上記モデルでは、$b$ |
浮動小数点の評価方法
マクロ | 説明 | 対応バージョン |
---|---|---|
FLT_EVAL_METHOD |
浮動小数点数がどのように評価されるかを表す整数値 | C++11 |
桁数
マクロ | 説明 | 対応バージョン |
---|---|---|
FLT_DIG |
float で正確に表現可能な10進数の最大の桁数。上記モデルでは、$b$ が $10$ の累乗の場合、$p \log_{10} b$、それ以外の場合、$\lfloor (p - 1)\log_{10} b\rfloor$ |
|
DBL_DIG |
double で正確に表現可能な10進数の最大の桁数。上記モデルでは、$b$ が $10$ の累乗の場合、$p \log_{10} b$、それ以外の場合、$\lfloor (p - 1)\log_{10} b\rfloor$ |
|
LDBL_DIG |
long double で正確に表現可能な10進数の最大の桁数。上記モデルでは、$b$ が $10$ の累乗の場合、$p \log_{10} b$、それ以外の場合、$\lfloor (p - 1)\log_{10} b\rfloor$ |
|
FLT_DECIMAL_DIG |
float の数値を10進数で正確に表すのに必要な有効数字の桁数。上記モデルでは、$b$ が $10$ の累乗の場合、$p \log_{10} b$、それ以外の場合、$\lceil 1 + p \log_{10} b\rceil$ |
C++17 |
DBL_DECIMAL_DIG |
double の数値を10進数で正確に表すのに必要な有効数字の桁数。上記モデルでは、$b$ が $10$ の累乗の場合、$p \log_{10} b$、それ以外の場合、$\lceil 1 + p \log_{10} b\rceil$ |
C++17 |
LDBL_DECIMAL_DIG |
long double の数値を10進数で正確に表すのに必要な有効数字の桁数。上記モデルでは、$b$ が $10$ の累乗の場合、$p \log_{10} b$、それ以外の場合、$\lceil 1 + p \log_{10} b\rceil$ |
C++17 |
DECIMAL_DIG |
精度が一番高い浮動小数点型の数値を10進数で正確に表すのに必要な有効数字の桁数。 上記モデルでは、$p_{\rm max}$ を精度が一番高い浮動小数点型の $p$ とすると、$b$ が $10$ の累乗の場合、$p_{\rm max} \log_{10} b$、それ以外の場合、$\lceil 1 + p_{\rm max}\log_{10} b\rceil$ |
C++11 |
FLT_MANT_DIG |
float を基数 FLT_RADIX で表現した際の仮数部の桁数。上記モデルでは、$p$ |
|
DBL_MANT_DIG |
double を基数 FLT_RADIX で表現した際の仮数部の桁数。上記モデルでは、$p$ |
|
LDBL_MANT_DIG |
long double を基数 FLT_RADIX で表現した際の仮数部の桁数。上記モデルでは、$p$ |
機械イプシロン
マクロ | 説明 | 対応バージョン |
---|---|---|
FLT_EPSILON |
float における、$1$ と $1$ より大きい最小の数との差。(機械イプシロン)上記モデルでは、$b^{1-p}$ |
|
DBL_EPSILON |
double における、$1$ と $1$ より大きい最小の数との差。(機械イプシロン)上記モデルでは、$b^{1-p}$ |
|
LDBL_EPSILON |
long double における、$1$ と $1$ より大きい最小の数との差。(機械イプシロン)上記モデルでは、$b^{1-p}$ |
非正規化数
マクロ | 説明 | 対応バージョン |
---|---|---|
FLT_HAS_SUBNORM |
float における非正規化数のサポート状況を判定する |
C++17 |
DBL_HAS_SUBNORM |
double における非正規化数のサポート状況を判定する |
C++17 |
LDBL_HAS_SUBNORM |
long double における非正規化数のサポート状況を判定する |
C++17 |
最大値
マクロ | 説明 | 対応バージョン |
---|---|---|
FLT_MAX |
float の最大の有限値。上記モデルでは、$(1-b^{-p})b^{e_{\rm max}}$ |
|
DBL_MAX |
double の最大の有限値。上記モデルでは、$(1-b^{-p})b^{e_{\rm max}}$ |
|
LDBL_MAX |
long double の最大の有限値。上記モデルでは、$(1-b^{-p})b^{e_{\rm max}}$ |
|
FLT_MAX_10_EXP |
$10$ の $n$ 乗が、float の有限の値として表現可能であるような、最大の整数値 $n$。上記モデルでは、$\lfloor\log_{10} ((1-b^{-p})b^{e_{\rm max}})\rfloor$ |
|
DBL_MAX_10_EXP |
$10$ の $n$ 乗が、double の有限の値として表現可能であるような、最大の整数値 $n$。上記モデルでは、$\lfloor\log_{10} ((1-b^{-p})b^{e_{\rm max}})\rfloor$ |
|
LDBL_MAX_10_EXP |
$10$ の $n$ 乗が、long double の有限の値として表現可能であるような、最大の整数値 $n$。上記モデルでは、$\lfloor\log_{10} ((1-b^{-p})b^{e_{\rm max}})\rfloor$ |
|
FLT_MAX_EXP |
FLT_RADIX の $n - 1$ 乗が、float の有限の値として表現可能であるような、最大の整数値 $n$。上記モデルでは、$e_{\rm max}$ |
|
DBL_MAX_EXP |
FLT_RADIX の $n - 1$ 乗が、double の有限の値として表現可能であるような、最大の整数値 $n$。上記モデルでは、$e_{\rm max}$ |
|
LDBL_MAX_EXP |
FLT_RADIX の $n - 1$ 乗が、long double の有限の値として表現可能であるような、最大の整数値 $n$。上記モデルでは、$e_{\rm max}$ |
最小値
マクロ | 説明 | 対応バージョン |
---|---|---|
FLT_MIN |
float の正の正規化数のうち最小のもの。上記モデルでは、$b^{e_{\rm min} - 1}$ |
|
DBL_MIN |
double の正の正規化数のうち最小のもの。上記モデルでは、$b^{e_{\rm min} - 1}$ |
|
LDBL_MIN |
long double の正の正規化数のうち最小のもの。上記モデルでは、$b^{e_{\rm min} - 1}$ |
|
FLT_TRUE_MIN |
float の正の最小値 |
C++17 |
DBL_TRUE_MIN |
double の正の最小値 |
C++17 |
LDBL_TRUE_MIN |
long double の正の最小値 |
C++17 |
FLT_MIN_10_EXP |
$10$ の $n$ 乗がfloat の正の正規化数であるような最小の負の整数値 $n$。上記モデルでは、$\lceil\log_{10} b^{e_{\rm min} - 1}\rceil$ |
|
DBL_MIN_10_EXP |
$10$ の $n$ 乗がdouble の正の正規化数であるような最小の負の整数値 $n$。上記モデルでは、$\lceil\log_{10} b^{e_{\rm min} - 1}\rceil$ |
|
LDBL_MIN_10_EXP |
$10$ の $n$ 乗がlong double の正の正規化数であるような最小の負の整数値 $n$。上記モデルでは、$\lceil\log_{10} b^{e_{\rm min} - 1}\rceil$ |
|
FLT_MIN_EXP |
FLT_RADIX の $n - 1$ 乗がfloat の正規化数として表現可能な最小の負の整数値 $n$。上記モデルでは、$e_{\rm min}$ |
|
DBL_MIN_EXP |
FLT_RADIX の $n - 1$ 乗がdouble の正規化数として表現可能な最小の負の整数値 $n$。上記モデルでは、$e_{\rm min}$ |
|
LDBL_MIN_EXP |
FLT_RADIX の $n - 1$ 乗がlong double の正規化数として表現可能な最小の負の整数値 $n$。上記モデルでは、$e_{\rm min}$ |