数値演算と浮動小数点のサポートMath and floating-point support

ユニバーサル C ランタイム ライブラリ (UCRT) では、ISO C99 で必要とされる関数をすべて含む、多数の整数値および浮動小数点数値演算ライブラリ関数を提供しています。The Universal C Runtime library (UCRT) provides many integral and floating-point math library functions, including all of those required by ISO C99. 浮動小数点関数は、正確性とパフォーマンスのバランスをとるために実装されます。The floating-point functions are implemented to balance performance with correctness. 正確に丸めた結果を生成するには非常にコストがかかる場合があるため、正確に丸めた結果の近似値を効率的に生成できるように当該関数が設計されました。Because producing the correctly rounded result may be prohibitively expensive, these functions are designed to efficiently produce a close approximation to the correctly rounded result. ほとんどのケースでは、生成される結果は正確に丸めた結果の +/- 1 ulp の誤差範囲内に収まります。ただし、不正確さがそれより大きくなる場合もあります。In most cases, the result produced is within +/-1 ulp of the correctly rounded result, though there may be cases where there is greater inaccuracy.

浮動小数点数値演算ライブラリ関数の多くは、CPU アーキテクチャの種類に応じて実装の種類も異なります。Many of the floating point math library functions have different implementations for different CPU architectures. たとえば、32 ビット x86 CRT の実装は、64 ビット x64 CRT の実装とは異なります。For example, the 32-bit x86 CRT may have a different implementation than the 64-bit x64 CRT. さらに、関数の中には特定の CPU アーキテクチャに対して複数の実装が用意されているものもあります。In addition, some of the functions may have multiple implementations for a given CPU architecture. CPU でサポートされている命令セットに応じて実行時に動的に実装を選択するのが最も効率的な方法です。The most efficient implementation is selected dynamically at run-time depending on the instruction sets supported by the CPU. たとえば、32 ビット x86 CRT で、一部の関数には x87 実装と SSE2 実装の両方が用意されています。For example, in the 32-bit x86 CRT, some functions have both an x87 implementation and an SSE2 implementation. SSE2 をサポートしている CPU で実行すると、速い方の SSE2 実装が使用されます。When running on a CPU that supports SSE2, the faster SSE2 implementation is used. SSE2 をサポートしていない CPU で実行すると、遅い方の x87 実装が使用されます。When running on a CPU that does not support SSE2, the slower x87 implementation is used. 数値演算ライブラリ関数の実装の種類が異なると、結果を生成するために使用する CPU 命令およびアルゴリズムも異なる場合があります。このため、CPU 間で、関数の生成する結果が異なる場合があります。Because different implementations of the math library functions may use different CPU instructions and different algorithms to produce their results, the functions may produce different results across CPUs. ほとんどの場合、結果は正確に丸めた結果の +/- 1 ulp の誤差範囲内に収まります。ただし、実際の結果は、CPU 間で異なる場合があります。In most cases, the results are within +/-1 ulp of the correctly rounded result, but the actual results may vary across CPUs.

以前の 16 ビット バージョンの Microsoft C/C++ および Microsoft Visual C++ では、80 ビット精度浮動小数点データ型として long double 型をサポートしていました。Previous 16-bit versions of Microsoft C/C++ and Microsoft Visual C++ supported the long double type as an 80-bit precision floating-point data type. 最近のバージョンの Visual C++ では、long double データ型は、double 型と同じ 64 ビット精度浮動小数点データ型となっています。In later versions of Visual C++, the long double data type is a 64-bit precision floating-point data type identical to the double type. コンパイラは long doubledouble を個別の型として扱いますが、long double 関数はそれに対応する double 関数と同じです。The compiler treats long double and double as distinct types, but the long double functions are identical to their double counterparts. CRT では、ISO C99 ソース コードの互換性を維持するために long double バージョンの数値演算関数を提供しています。ただし、そのバイナリ表現は他のコンパイラと異なる場合があるので注意してください。The CRT provides long double versions of the math functions for ISO C99 source code compatibility, but note that the binary representation may differ from other compilers.

サポートされている数値演算と浮動小数点のルーチンSupported math and floating-point routines

ルーチンによって返される値Routine [使用]Use
abs、labs、llabs、_abs64abs, labs, llabs, _abs64 整数型の絶対値を計算しますComputes the absolute value of an integer type
acos、acosf、acoslacos, acosf, acosl アーク コサインを計算しますComputes the arc cosine
acosh、acoshf、acoshlacosh, acoshf, acoshl 双曲線アーク コサインを計算しますComputes the hyperbolic arc cosine
asin、asinf、asinlasin, asinf, asinl アーク サインを計算しますComputes the arc sine
asinh、asinhf、asinhlasinh, asinhf, asinhl 双曲線アーク サインを計算しますComputes the hyperbolic arc sine
atan、atanf、atanl、atan2、atan2f、atan2latan, atanf, atanl, atan2, atan2f, atan2l アーク タンジェントを計算しますComputes the arc tangent
atanh、atanhf、atanhlatanh, atanhf, atanhl 双曲線アーク タンジェントを計算しますComputes the hyperbolic arc tangent
_atodbl、_atodbl_l_atodbl, _atodbl_l ロケール固有の文字列を double に変換しますConverts a locale-specific string to a double
atof、_atof_latof, _atof_l 文字列を double に変換しますConverts a string to a double
_atoflt、_atoflt_l、_atoldbl、_atoldbl_l_atoflt, _atoflt_l, _atoldbl, _atoldbl_l ロケール固有の文字列を float または long double に変換しますConverts a locale-specific string to a float or long double
cbrt、cbrtf、cbrtlcbrt, cbrtf, cbrtl 立方根を計算しますComputes the cube root
ceil、ceilf、ceillceil, ceilf, ceill 切り上げを計算しますComputes the ceiling
_chgsign、_chgsignf、_chgsignl_chgsign, _chgsignf, _chgsignl 加法逆元を計算しますComputes the additive inverse
_clear87、_clearfp_clear87, _clearfp 浮動小数点ステータス レジスタを取得してクリアしますGets and clears the floating-point status register
_control87、__control87_2、_controlfp_control87, __control87_2, _controlfp 浮動小数点制御ワードを取得および設定しますGets and sets the floating-point control word
_controlfp_s_controlfp_s 安全なバージョンの _controlfp ですSecure version of _controlfp
copysign、copysignf、copysignl、_copysign、_copysignf、_copysignlcopysign, copysignf, copysignl, _copysign, _copysignf, _copysignl ある引数の絶対値と別の引数の符号を持つ値を返しますReturns a value that has the magnitude of one argument and the sign of another
cos、cosf、coslcos, cosf, cosl サインを計算しますComputes the sine
cosh、coshf、coshlcosh, coshf, coshl 双曲線サインを計算しますComputes the hyperbolic sine
div、ldiv、lldivdiv, ldiv, lldiv 2 つの整数値の商と剰余を計算しますComputes the quotient and the remainder of two integer values
_ecvtecvt_ecvt, ecvt double を文字列に変換しますConverts a double to a string
_ecvt_s_ecvt_s 安全なバージョンの _ecvt ですSecure version of _ecvt
erf、erff、erflerf, erff, erfl エラー関数を計算しますComputes the error function
erfc、erfcf、erfclerfc, erfcf, erfcl 相補誤差関数を計算しますComputes the complementary error function
exp、expf、explexp, expf, expl 指数 ex を計算しますComputes the exponential ex
exp2、exp2f、exp2lexp2, exp2f, exp2l 指数 2x を計算しますComputes the exponential 2x
expm1、expm1f、expm1lexpm1, expm1f, expm1l ex-1 を計算しますComputes ex-1
fabs、fabsf、fabslfabs, fabsf, fabsl 浮動小数点型の絶対値を計算しますComputes the absolute value of a floating-point type
_fcvtfcvt_fcvt, fcvt 浮動小数点数を文字列に変換します。Converts a floating-point number to a string
_fcvt_s_fcvt_s 安全なバージョンの _fcvt ですSecure version of _fcvt
fdim、fdimf、fdimlfdim, fdimf, fdiml 2 つの値の間の正の値の差を求めますDetermines the positive difference between two values
feclearexceptfeclearexcept 指定した浮動小数点例外をクリアしますClears specified floating-point exceptions
fegetenvfegetenv 現在の浮動小数点環境を格納しますStores the current floating-point environment
fegetexceptflagfegetexceptflag 指定した浮動小数点例外の状態を取得しますGets the specified floating-point exception status
fegetroundfegetround 浮動小数点丸めモード制御を取得しますGets the floating-point rounding mode
feholdexceptfeholdexcept 無停止浮動小数点例外モードを設定しますSets non-stop floating-point exception mode
feraiseexceptferaiseexcept 指定した浮動小数点例外を発生させますRaises the specified floating-point exceptions
fesetenvfesetenv 現在の浮動小数点環境を設定しますSets the current floating-point environment
fesetexceptflagfesetexceptflag 指定した浮動小数点状態フラグを設定しますSets the specified floating-point status flags
fesetroundfesetround 指定した浮動小数点丸めモードを設定しますSets the specified floating-point rounding mode
fetestexceptfetestexcept 設定されている浮動小数点例外状態フラグを確認しますDetermines which floating-point exception status flags are set
feupdateenvfeupdateenv 浮動小数点環境を復元してから、前の例外を発生させますRestores a floating-point environment then raises previous exceptions
floor、floorf、floorlfloor, floorf, floorl 切り捨てを計算しますComputes the floor
fma、fmaf、fmalfma, fmaf, fmal 融合型積和演算を計算しますComputes a fused multiply-add
fmax、fmaxf、fmaxlfmax, fmaxf, fmaxl 引数の最大値を計算しますComputes the maximum of the arguments
fmin、fminf、fminlfmin, fminf, fminl 引数の最小値を計算します。Computes the minimum of the arguments
fmod、fmodf、fmodlfmod, fmodf, fmodl 浮動小数点の剰余を計算しますComputes the floating-point remainder
_fpclass、_fpclassf_fpclass, _fpclassf 浮動小数点値の分類を返しますReturns the classification of a floating-point value
fpclassifyfpclassify 浮動小数点値の分類を返しますReturns the classification of a floating-point value
_fpieee_flt_fpieee_flt 浮動小数点例外のハンドラーを設定しますSets a handler for floating-point exceptions
_fpreset_fpreset 浮動小数点環境をリセットしますResets the floating-point environment
frexp、frexpf、frexplfrexp, frexpf, frexpl 浮動小数点数の仮数と指数を取得しますGets the mantissa and exponent of a floating-point number
_gcvtgcvt_gcvt, gcvt 浮動小数点数を文字列に変換します。Converts a floating-point number to a string
_gcvt_s_gcvt_s 安全なバージョンの _gcvt ですSecure version of _gcvt
_get_FMA3_enable、_set_FMA3_enable_get_FMA3_enable, _set_FMA3_enable x64 での FMA3 命令使用フラグを取得または設定しますGets or sets a flag for use of FMA3 instructions on x64
hypot、hypotf、hypotl、_hypot、_hypotf、_hypotlhypot, hypotf, hypotl, _hypot, _hypotf, _hypotl 斜辺を計算しますComputes the hypotenuse
ilogb、ilogbf、ilogblilogb, ilogbf, ilogbl 整数の 2 進数の指数を計算しますComputes the integer base-2 exponent
imaxabsimaxabs 整数型の絶対値を計算しますComputes the absolute value of an integer type
imaxdivimaxdiv 2 つの整数値の商と剰余を計算しますComputes the quotient and the remainder of two integer values
isfinite、_finite、_finitefisfinite, _finite, _finitef ある値が有限かどうかを確認しますDetermines whether a value is finite
isgreater、isgreaterequal、isless、islessequal、islessgreater、isunorderedisgreater, isgreaterequal, isless, islessequal, islessgreater, isunordered 2 つの浮動小数点値の順序を比較しますCompare the order of two floating point values
isinfisinf 浮動小数点値が無限かどうかを決定しますDetermines whether a floating-point value is infinite
isnan、_isnan、_isnanfisnan, _isnan, _isnanf NaN の浮動小数点値をテストしますTests a floating-point value for NaN
isnormalisnormal 浮動小数点値が有限であり、非正規ではないかどうかをテストしますTests whether a floating-point value is both finite and not subnormal
_j0、_j1、_jn_j0, _j1, _jn Bessel 関数を計算しますComputes the Bessel function
ldexp、ldexpf、ldexplldexp, ldexpf, ldexpl x*2n を計算しますComputes x*2n
lgamma、lgammaf、lgammallgamma, lgammaf, lgammal ガンマ関数の絶対値の自然対数を計算しますComputes the natural logarithm of the absolute value of the gamma function
llrint、llrintf、llrintlllrint, llrintf, llrintl 浮動小数点値を最も近い long long 値に丸めますRounds a floating-point value to the nearest long long value
llround、llroundf、llroundlllround, llroundf, llroundl 浮動小数点値を最も近い long long 値に丸めますRounds a floating-point value to the nearest long long value
log、logf、logl、log10、log10f、log10llog, logf, logl, log10, log10f, log10l 自然対数または 10 を底とする対数を計算しますComputes the natural or base-10 logarithm
log1p、log1pf、log1pllog1p, log1pf, log1pl 1+x の自然対数を計算しますComputes the natural logarithm of 1+x
log2、log2f、log2llog2, log2f, log2l 2 を底とする対数を計算しますComputes the base-2 logarithm
logb、logbf、logbl、_logb、_logbflogb, logbf, logbl, _logb, _logbf 浮動小数点値の指数を返しますReturns the exponent of a floating-point value
lrint、lrintf、lrintllrint, lrintf, lrintl 浮動小数点値を最も近い long 値に丸めますRounds a floating-point value to the nearest long value
_lrotl、_lrotr_lrotl, _lrotr 整数値を左または右に回転しますRotates an integer value left or right
lround、lroundf、lroundllround, lroundf, lroundl 浮動小数点値を最も近い long 値に丸めますRounds a floating-point value to the nearest long value
_matherr_matherr 既定の数値演算エラー ハンドラーですThe default math error handler
__max__max 2 つの値の大きい方を返すマクロですMacro that returns the larger of two values
__min__min 2 つの値の小さい方を返すマクロですMacro that returns the smaller of two values
modf、modff、modflmodf, modff, modfl 浮動小数点値を小数部と整数部に分割しますSplits a floating-point value into fractional and integer parts
nan、nanf、nanlnan, nanf, nanl 簡易な NaN 値を返しますReturns a quiet NaN value
nearbyint、nearbyintf、nearbyintlnearbyint, nearbyintf, nearbyintl 丸められた値を返しますReturns the rounded value
nextafter、nextafterf、nextafterl、_nextafter、_nextafterfnextafter, nextafterf, nextafterl, _nextafter, _nextafterf 次の表現可能な浮動小数点値を返しますReturns the next representable floating-point value
nexttoward、nexttowardf、nexttowardlnexttoward, nexttowardf, nexttowardl 次の表現可能な浮動小数点値を返しますReturns the next representable floating-point value
pow、powf、powlpow, powf, powl xy の値を返しますReturns the value of xy
remainder、remainderf、remainderlremainder, remainderf, remainderl 2 つの浮動小数点値の商の剰余を計算しますComputes the remainder of the quotient of two floating-point values
remquo、remquof、remquolremquo, remquof, remquol 2 つの整数値の剰余を計算しますComputes the remainder of two integer values
rint、rintf、rintlrint, rintf, rintl 浮動小数点値を丸めますRounds a floating-point value
_rotl、_rotl64、_rotr、_rotr64_rotl, _rotl64, _rotr, _rotr64 整数型のビットを回転しますRotates bits in integer types
round、roundf、roundlround, roundf, roundl 浮動小数点値を丸めますRounds a floating-point value
_scalb、_scalbf_scalb, _scalbf 引数を 2 のべき乗の倍率で増減させますScales argument by a power of 2
scalbn、scalbnf、scalbnl、scalbln、scalblnf、scalblnlscalbn, scalbnf, scalbnl, scalbln, scalblnf, scalblnl 浮動小数点数に整数である FLT_RADIX の累乗を乗算しますMultiplies a floating-point number by an integral power of FLT_RADIX
_set_controlfp_set_controlfp 浮動小数点制御ワードを設定しますSets the floating-point control word
_set_SSE2_enable_set_SSE2_enable SSE2 命令を有効または無効にしますEnables or disables SSE2 instructions
signbitsignbit 浮動小数点値の符号ビットをテストしますTests the sign bit of a floating-point value
sin、sinf、sinlsin, sinf, sinl サインを計算しますComputes the sine
sinh、sinhf、sinhlsinh, sinhf, sinhl 双曲線サインを計算しますComputes the hyperbolic sine
sqrt、sqrtf、sqrtlsqrt, sqrtf, sqrtl 平方根を計算しますComputes the square root
_status87、_statusfp、_statusfp2_status87, _statusfp, _statusfp2 浮動小数点ステータス ワードを取得しますGets the floating-point status word
strtof、_strtof_lstrtof, _strtof_l 文字列を float に変換しますConverts a string to a float
strtold、_strtold_lstrtold, _strtold_l 文字列をlong doubleに変換します。Converts a string to a long double
tan、tanf、tanltan, tanf, tanl タンジェントを計算しますComputes the tangent
tanh、tanhf、tanhltanh, tanhf, tanhl 双曲線タンジェントを計算しますComputes the hyperbolic tangent
tgamma、tgammaf、tgammaltgamma, tgammaf, tgammal ガンマ関数を計算しますComputes the gamma function
trunc、truncf、truncltrunc, truncf, truncl 小数部を切り捨てますTruncates the fractional part
_wtof、_wtof_l_wtof, _wtof_l ワイド文字列を double に変換しますConverts a wide string to a double
_y0、_y1、_yn_y0, _y1, _yn Bessel 関数を計算しますComputes the Bessel function

関連項目See also

カテゴリ別ユニバーサル C ランタイム ルーチンUniversal C runtime routines by category
浮動小数点プリミティブFloating-point primitives