次の方法で共有


数値演算と浮動小数点のサポート

ユニバーサル C ランタイム ライブラリ (UCRT) には、ISO C99 で必要なすべての関数を含む、多くの整数および浮動小数点演算ライブラリ関数が用意されています。 浮動小数点関数は、正確性とパフォーマンスのバランスをとるために実装されます。 正確に丸めた結果を生成するには非常にコストがかかる場合があるため、正確に丸めた結果の近似値を効率的に生成できるように当該関数が設計されました。 ほとんどの場合、生成される結果は、正しく丸められた結果の +/-1 ULP (最小精度の単位) 内にありますが、不正確さが大きい場合があります。

ISO C 標準 11 (C11) 以降では、<tgmath.h> ヘッダーと、<math.h><complex.h> には、パラメーターの型に基づいて対応する数値演算関数を呼び出すマクロが用意されています。 詳細については、「ジェネリック型数値演算」を参照してください。

浮動小数点数値演算ライブラリ関数の多くは、CPU アーキテクチャの種類に応じて実装の種類も異なります。 たとえば、32 ビット x86 CRT の実装は、64 ビット x64 CRT の実装とは異なります。 さらに、関数の中には特定の CPU アーキテクチャに対して複数の実装が用意されているものもあります。 CPU でサポートされている命令セットに応じて実行時に動的に実装を選択するのが最も効率的な方法です。 たとえば、32 ビット x86 CRT で、一部の関数には x87 実装と SSE2 実装の両方が用意されています。 SSE2 をサポートしている CPU で実行すると、速い方の SSE2 実装が使用されます。 SSE2 をサポートしていない CPU で実行すると、遅い方の x87 実装が使用されます。 数値演算ライブラリ関数の実装の種類が異なると、結果を生成するために使用する CPU 命令およびアルゴリズムも異なる場合があります。このため、CPU 間で、関数の生成する結果が異なる場合があります。 ほとんどの場合、結果は正しく丸められた結果の +/-1 ULP 内にありますが、実際の結果は CPU によって異なる場合があります。

以前の 16 ビット バージョンの Microsoft C/C++ および Microsoft Visual C++ では、80 ビット精度浮動小数点データ型として long double 型をサポートしていました。 最近のバージョンの Visual C++ では、long double データ型は、double 型と同じ 64 ビット精度浮動小数点データ型となっています。 コンパイラは、long doubledouble を異なる型として扱いますが、long double 関数は、対応する double 関数と同じものとなります。 CRT では、ISO C99 ソース コードの互換性を維持するために long double バージョンの数値演算関数を提供しています。ただし、そのバイナリ表現は他のコンパイラと異なる場合があるので注意してください。

サポートされている数値演算と浮動小数点のルーチン

ルーチンによって返される値 使用
abslabsllabs_abs64 整数型の絶対値を計算します
acosacosfacosl アーク コサインを計算します
acoshacoshfacoshl 双曲線アーク コサインを計算します
asinasinfasinl アーク サインを計算します
asinhasinhfasinhl 双曲線アーク サインを計算します
atanatanfatanlatan2atan2fatan2l アーク タンジェントを計算します
atanhatanhfatanhl 双曲線アーク タンジェントを計算します
_atodbl, _atodbl_l ロケール固有の文字列を double に変換します
atof, _atof_l 文字列を double に変換します
_atoflt_atoflt_l_atoldbl_atoldbl_l ロケール固有の文字列を float または long double に変換します
cbrtcbrtfcbrtl 立方根を計算します
ceilceilfceill 切り上げを計算します
_chgsign_chgsignf_chgsignl 加法逆元を計算します
_clear87, _clearfp 浮動小数点ステータス レジスタを取得してクリアします
_control87_controlfp__control87_2 浮動小数点制御ワードを取得および設定します
_controlfp_s 安全なバージョンの _controlfp です
copysigncopysignfcopysignl_copysign_copysignf_copysignl ある引数の絶対値と別の引数の符号を持つ値を返します
coscosfcosl サインを計算します
coshcoshfcoshl 双曲線サインを計算します
divldivlldiv 2 つの整数値の商と剰余を計算します
_ecvt, ecvt double を文字列に変換します
_ecvt_s 安全なバージョンの _ecvt です
erferfferfl エラー関数を計算します
erfcerfcferfcl 相補誤差関数を計算します
expexpfexpl 指数 ex を計算します
exp2exp2fexp2l 指数 2x を計算します
expm1expm1fexpm1l ex-1 を計算します
fabsfabsffabsl 浮動小数点型の絶対値を計算します
_fcvt, fcvt 浮動小数点数を文字列に変換します。
_fcvt_s 安全なバージョンの _fcvt です
fdimfdimffdiml 2 つの値の間の正の値の差を求めます
feclearexcept 指定した浮動小数点例外をクリアします
fegetenv 現在の浮動小数点環境を格納します
fegetexceptflag 指定した浮動小数点例外の状態を取得します
fegetround 浮動小数点丸めモード制御を取得します
feholdexcept 無停止浮動小数点例外モードを設定します
feraiseexcept 指定した浮動小数点例外を発生させます
fesetenv 現在の浮動小数点環境を設定します
fesetexceptflag 指定した浮動小数点状態フラグを設定します
fesetround 指定した浮動小数点丸めモードを設定します
fetestexcept 設定されている浮動小数点例外状態フラグを確認します
feupdateenv 浮動小数点環境を復元してから、前の例外を発生させます
floorfloorffloorl 切り捨てを計算します
fmafmaffmal 融合型積和演算を計算します
fmaxfmaxffmaxl 引数の最大値を計算します
fminfminffminl 引数の最小値を計算します
fmodfmodffmodl 浮動小数点の剰余を計算します
_fpclass, _fpclassf 浮動小数点値の分類を返します
fpclassify 浮動小数点値の分類を返します
_fpieee_flt 浮動小数点例外のハンドラーを設定します
_fpreset 浮動小数点環境をリセットします
frexpfrexpffrexpl 浮動小数点数の仮数と指数を取得します
_gcvt, gcvt 浮動小数点数を文字列に変換します。
_gcvt_s 安全なバージョンの _gcvt です
_get_FMA3_enable, _set_FMA3_enable x64 での FMA3 命令使用フラグを取得または設定します
hypothypotfhypotl_hypot_hypotf_hypotl 斜辺を計算します
ilogbilogbfilogbl 整数の 2 進数の指数を計算します
imaxabs 整数型の絶対値を計算します
imaxdiv 2 つの整数値の商と剰余を計算します
isfinite_finite_finitef ある値が有限かどうかを確認します
isgreaterisgreaterequalislessislessequalislessgreaterisunordered 2 つの浮動小数点値の順序を比較します
isinf 浮動小数点値が無限かどうかを決定します
isnan_isnan_isnanf NaN の浮動小数点値をテストします
isnormal 浮動小数点値が有限であり、非正規ではないかどうかをテストします
_j0_j1_jn Bessel 関数を計算します
ldexpldexpfldexpl x*2n を計算します
lgammalgammaflgammal ガンマ関数の絶対値の自然対数を計算します
llrintllrintfllrintl 浮動小数点値を最も近い long long 値に丸めます
llroundllroundfllroundl 浮動小数点値を最も近い long long 値に丸めます
loglogflogllog10log10flog10l 自然対数または 10 を底とする対数を計算します
log1plog1pflog1pl 1+x の自然対数を計算します
log2log2flog2l 2 を底とする対数を計算します
logblogbflogbl_logb_logbf 浮動小数点値の指数を返します
lrintlrintflrintl 浮動小数点値を最も近い long 値に丸めます
_lrotl, _lrotr 整数値を左または右に回転します
lroundlroundflroundl 浮動小数点値を最も近い long 値に丸めます
_matherr 既定の数値演算エラー ハンドラーです
__max 2 つの値の大きい方を返すマクロです
__min 2 つの値の小さい方を返すマクロです
modfmodffmodfl 浮動小数点値を小数部と整数部に分割します
nannanfnanl 簡易な NaN 値を返します
nearbyintnearbyintfnearbyintl 丸められた値を返します
nextafternextafterfnextafterl_nextafter_nextafterf 次の表現可能な浮動小数点値を返します
nexttowardnexttowardfnexttowardl 次の表現可能な浮動小数点値を返します
powpowfpowl の値を返します。 xy
remainderremainderfremainderl 2 つの浮動小数点値の商の剰余を計算します
remquoremquofremquol 2 つの整数値の剰余を計算します
rintrintfrintl 浮動小数点値を丸めます
_rotl_rotl64_rotr_rotr64 整数型のビットを回転します
roundroundfroundl 浮動小数点値を丸めます
_scalb, _scalbf 引数を 2 のべき乗の倍率で増減させます
scalbnscalbnfscalbnlscalblnscalblnfscalblnl 浮動小数点数に整数の累乗を乗算します。 FLT_RADIX
_set_controlfp 浮動小数点制御ワードを設定します
_set_SSE2_enable SSE2 命令を有効または無効にします
signbit 浮動小数点値の符号ビットをテストします
sinsinfsinl サインを計算します
sinhsinhfsinhl 双曲線サインを計算します
sqrtsqrtfsqrtl 平方根を計算します
_status87_statusfp_statusfp2 浮動小数点ステータス ワードを取得します
strtof, _strtof_l 文字列を float に変換します
strtold, _strtold_l 文字列を long double に変換します
tantanftanl タンジェントを計算します
tanhtanhftanhl 双曲線タンジェントを計算します
tgammatgammaftgammal ガンマ関数を計算します
trunctruncftruncl 小数部を切り捨てます
_wtof, _wtof_l ワイド文字列を double に変換します
_y0_y1_yn Bessel 関数を計算します

関連項目

カテゴリ別ユニバーサル C ランタイム ルーチン
浮動小数点プリミティブ