B.38. 組み込み関数

B.38.1. ワークアイテム関数

Table B.102. 表:ワークアイテム・グループ関数

 関数 
 解説
 uint get_work_dim()
指定した次元数を返します。
次元数はclEnqueueND
RangeKernelのwork_dim
引数で指定したものです。
clEnqueueTaskの場合は、
常に1を返します。
 size_t get_global_
size(uint dimindx)
 dimindexで指定した次
元のグローバル・ワーク
アイテム(work item)
の数を返します。clEnqueue
NDRangeKernelの
global_work_size引数で
指定したものが該当します。
dimindexの指定可能値は
0〜get_work_dim()-1で、
これ以外の値については1を
返します。
 size_t get_
global_id(uint dimindx)
 dimindexで指定した
次元で固有のグローバル・
ワークアイテム(work
item)IDを返します。
 size_t get_local_
size(uint dimindx)
 dimindexで指定した次
元のローカル・ワークア
イテム(work item)の数
を返します。clEnqueueND
RangeKernelのlocal_
work_size引数で指定した
ものが該当します。
 size_t get_local_
id(uint dimindx)
 dimindexで指定した次元
で固有のローカル・ワーク
アイテム(work item)
IDを返します。
 size_t get_num_
groups(uint dimindx)
 dimindexで指定した
次元のワークグループ
(work group)の数を返
します。clEnqueueND
RangeKernelのlocal_
work_size引数で指定し
たものが該当します。
 size_t get_group_
id(uint dimindx)
 dimindexで指定した
次元でワークグループ(
work group)IDを返し
ます。
 size_t get_global_
offset(uint dimindx)
 dimindexで指定した
次元のオフセット(
offset)を返します。
clEnqueueNDRange
Kernelのglobal_work_
offset引数で指定したも
のが該当します。

B.38.2. 数学関数

Table B.103. 表:数学関数

関数 解説
gentype acos (gentype)


Arc cosine関数
(逆三角関数)。

gentype acosh (gentype)
Inverse hyperbolic
cosine関数(逆双曲線関数)。
gentype acospi (gentype x)

acos (x) / πを
計算します。

gentype asin (gentype)
逆余弦(Arc sine)を計算します。
gentype asinh (gentype)
逆双曲線正弦(Inverse
hyperbolic sine)を計算します。

gentype asinpi (gentype x)

asin (x) / πを
計算します。
gentype atan (gentype y_over_x)
逆正接(Arc tangent)
を計算します。

gentype atan2 (gentype y, gentype x)
atan(y / x)を
計算します。
gentype atanh (gentype)
逆双曲線正接(Hyperbolic
arc tangent)を計算します。

gentype atanpi (gentype x)
atan (x) / πを
計算します。

gentype atan2pi (gentype y, gentype x)
atan2 (y, x) / πを
計算します。

gentype cbrt (gentype)
立方根・三乗根を計算し
ます。
gentype ceil (gentype)
正の無限大への丸めモー
ドで天井値を計算。
gentype copysign (gentype x, gentype y)
xの符号をyの符号に合
わせて返します。
gentype cos (gentype)
余弦(cosine)を計算
します。

gentype cosh (gentype)
双曲線余弦(hyperbolic
cosine)を計算します。
gentype cospi (gentype x)
cos (π x)を計算します。
gentype erfc (gentype)
相補誤差関数を計算します。

gentype erf (gentype)
誤差関数の計算をします。

gentype exp (gentype x)
eを底とする指数関数の
計算をします。
gentype exp2 (gentype)
2を底とする指数関数の
計算をします。

gentype exp10 (gentype)
10を底とする指数関数
の計算をします。

gentype expm1 (gentype x)

exp- 1.0の計算を
します。


gentype fabs (gentype)
浮動小数点数の絶対
値を計算します。

gentype fdim (gentype x, gentype y)
x > yのとき、x - y
x <= yのとき、+0

gentype floor (gentype)
負の無限大への丸め
モードで床関数を計算
gentype fma (gentype a, gentype b, gentype c)
aとbの無限精度の積と
cの和(a*b+c)を丸めた値
を計算します。途中の積
を求める過程では丸めず、
エッジケースにおける振る
舞いは IEEE754-2008に
準拠します。

gentype fmax (gentype x, gentype y)
gentypef fmax (gentypef x, float y)
gentyped fmax (gentyped x, double y)
x < yのときに、y
それ以外のときに、x
を返します。引数の片方
がNaNのときは、もう片方
の値を返します。
両方の引数がNaNのと
きは、NaNを返します。
gentype fmin(gentype x,gentype y)
gentypef fmin(gentypef x, float y)
gentyped fmin(gentyped x, double y)
y < xのときに、y
それ以外のときに、x
を返します。引数の片方がNaNのときは、もう片方の値を返します。
両方の引数がNaNのときは、NaNを返します。
gentype fmod(gentype x,gentype y)
x – y * trunc(x/y)
を計算します。
 gentype fract(gentype x, global gentype *iptr)
gentype fract (gentype x, local gentype *iptr)
gentype fract (gentype x, private gentype *iptr)
fmin(x – floor(x),
0x1.fffffep-1f)を計算します。
floor(x)はiptrで返されます。
gentype frexp(gentype x, global intn *exp)
gentype frexp (gentype x, local intn *exp)
gentype frexp (gentype x, private intn *exp)
x の仮数(mantissa、小数点
以下)と指数を計算します。各要
素に返される仮数は[1/2, 1)か
0の間の値となります。xの各値
は(仮数 * 2^exp)となります。
gentype hypot(gentype x, gentype y)
オーバーフローまたはアンダ
ーフローを回避しつつ、
x^2 + y^2の平方根値を求
めます。
 intn ilogb(gentype x)
 xの指数を整数値で返します。
 gentype ldexp(gentypex, intn exp)
gentype ldexp(gentype x, int exp)
 xの指数を整数値として計
算します。x * 2^expの計
算結果を返します。
 gentype lgamma(gentype x)
gentype lgamma_r(gentype x, global intn *signp)
gentype lgamma_r(gentype x, local intn *signp)
gentype lgamma_r(gentype x, private intn *signp)
ガンマ関数の自然対数(log
Γ(x))を計算します。
lgamma_rのsignp引数のポ
インタは算出したガンマ関数
の値の符号を返します。
gentype log(gentype x)
xの自然対数を計算します。
gentype log2(gentype x)
xの対数(底は2)を計算します。
gentype log10(gentype x)
xの対数(底は10)を計算します。
gentype log1p(gentype x)
`1.0 + x`の自然対数、
`log_e(1.0 + x)`を
計算します。
gentype logb(gentype x)
xの指数を計算
(log_r|x|の整数部分)
します。
gentype mad(gentype a, gentype b, gentype c)
madは(a*b+c)の近似計算
をします。精度よりも速度を
重視するときに使います。
gentype maxmag(gentype x, gentype y)
|x| > |y|のときに、x
|y| > |x|のときに、y
それ以外はfmax(x, y)
を計算します。
gentype minmag(gentype x, gentype y)
|x| < |y|のときに、x
|y| < |x|のときに、y
それ以外はfmin(x, y)を
計算します。
gentype modf(gentype x, global gentype *iptr)
gentype modf(gentype x, local gentype *iptr)
gentype modf(gentype x, private gentype *iptr)
浮動小数点を分解します。
modf関数は引数xを整数と
少数部分に分けます。各部分
は引数と同じ符号を持ちます。
iptrポインタが指すオブジェ
クトに算出した整数部分を保
存し、少数部分を返します。
float nan(uint nancode)
floatn nan(uintn nancode)
double nan(uint nancode)
doublen nan(uintn nancode)
quiet NaN(qNaN)を返します。
gentype nextafter(gentype x, gentype y);
単精度浮動小数点または倍
精度浮動小数点でy方向のx
の次の数値を計算します。

yがxより小さければ、xより
小さい値の最大浮動小数点
値を返します。
gentype pow(gentype x, gentype y)
xのy乗を計算します。
gentype pown(gentype x, intn y)
xのy乗を計算します。
yは整数とする。
gentype powr(gentype x, gentype y)
x >= 0の制限下で
xのy乗を計算します。
gentype remainder(gentype x, gentype y)
r = x – n * yを計算
します。nはx/yに最も近い
整数です。もしx/yに最も
近い整数が2つあるときは、
偶数値を選びます。rが0の
ときは、xと同じ符号に
なります。
floatn remquo (floatn x, floatn y,
__global intn *quo)
floatn remquo (floatn x, floatn y,
__local intn *quo)
floatn remquo (floatn x, floatn y,
__private intn *quo)
float remquo (float x, float y,
__global int *quo)
float remquo (float x, float y,
__local int *quo)
float remquo (float x, float y,
__private int *quo)
 r = x - k*yを計算します。
kはx/yに最も近い整数です。
もしx/yに最も近い整数が2つ
あるときは、偶数値を選びます。
rが0のときは、xと同じ符号に
なります。reminder()と異
なり、x/yの商(整数)の
下位7ビットを計算し、符号
はx/yの符号と同じになりま
す。quoポインタが指すオブ
ジェクトに返されます。
doublen remquo (doublen x,
    doublen y,
    __global intn *quo)
doublen remquo (doublen x,
    doublen y,
    __local intn *quo)
doublen remquo (doublen x,
    doublen y,
    __private intn *quo)
double remquo (double x,
    double y, __global int *quo)
double remquo (double x,
    double y,
    __local int *quo)
double remquo (double x,
    double y,
    __private int *quo)
r = x - k*yを計算します。
kはx/yに最も近い整数です。も
しx/yに最も近い整数が2つあると
きは、偶数値を選びます。rが0の
ときは、xと同じ符号になります。
reminder()と異なり、x/yの商
(整数)の下位7ビットを計算し、
符号はx/yの符号と同じになります。
quoポインタが指すオブジェクト
に返されます。
gentype rint (gentype)
最近接偶数への丸め
(round to the
nearest even) モードで
整数値への丸めを行います。
floatn rootn (floatn x, intn y)
float rootn (float x, int y)
doublen rootn (doublen x, intn y)
doublen rootn (double x, int y)
xの(1/y)乗を計算
します。
gentype round (gentype x)
丸め方向と関係なくxに最
も近い整数値への丸め(中間
値は0より遠い方向)を行います。
gentype rsqrt (gentype)
平方根の逆数を計算します。
gentype sin (gentype)
正弦(sine)を計算します。
gentype sincos (gentype x,
__global gentype *cosval)
gentype sincos (gentype x,
__local gentype *cosval)
gentype sincos (gentype x,
__private gentype *cosval)
正弦(sine)と余弦(cosine)
を計算します。正弦を戻り値
として返し、余弦をcosvalポ
インタを指すオブジェクトに
返します。
gentype sinh (gentype)

双曲線正弦(ハイパボリック
サイン)を計算します。

gentype sinpi (gentype x)

sin (π x)を計算します。

gentype sqrt (gentype)

平方根を計算します。

gentype tan (gentype)
正接(tangent)を計算します。
gentype tanh (gentype)

双曲線正接(hyperbolic
tangent)を計算します。

gentype tanpi (gentype x)
tan (π x)の計算をします。
gentype tgamma (gentype)
ガンマ関数の計算をします。
gentype trunc (gentype)
0への丸め (rounding
toward zero)モードで整数
への丸めを計算します。

B.38.3. half型、native型数学関数

Table B.104. 表:half型、native型の数学関数

関数詳細
gentype half_cos (gentype x)
余弦(cosine)の計算
をします。引数xの範囲は
-216 ... +216とします。

gentype half_divide (gentype x, gentype y)
x / yを計算します。

gentype half_exp (gentype x)

eを底とする指数関数
の計算をします。

gentype half_exp2 (gentype x)

2を底とする指数関数
の計算をします。

gentype half_exp10 (gentype x)
10を底とする指数関数の計算をします。

gentype half_log (gentype x)

自然対数を計算します。

gentype half_log2 (gentype x)
2を底とする対数の計算
をします。

gentype half_log10 (gentype x)
10を底とする対数の計算
をします。
gentype half_powr (gentype x, gentype y)
x >= 0の制限下でxのy
乗を計算します。

gentype half_recip (gentype x)

逆数の計算をします。

gentype half_rsqrt (gentype x)
平方根の逆数を計算します。

gentype half_sin (gentype x)
正弦(sine)の計算を
します。引数xの範囲は
-216 ... +216とします。


gentype half_sqrt (gentype x)

平方根を計算します。

gentype half_tan (gentype x)
正接(tangent)の計算
をします。引数xの範囲は
-216 ... +216とします。
gentype native_cos (gentype x)
余弦(cosine)の計算
をします。範囲は実装シ
ステムによります。

gentype native_divide (gentype x, gentype y)

x / yの計算をします。
範囲は実装システムに
よります。
gentype native_exp (gentype x)
eを底とする指数関数の
計算をします。引数xの
範囲は実装システムによ
り異なります。
gentype native_exp2 (gentype x)
2を底とする指数関数の
計算をします。引数xの
範囲は実装システムによ
り異なります。
gentype native_exp10 (gentype x)
10を底とする対数の計
算をします。引数xの範
囲は実装システムにより
異なります。
gentype native_log (gentype x)
自然対数を計算します。
範囲は実装システムによ
り異なります。
gentype native_log2 (gentype x)
2を底とする対数の計算
をします。範囲は実装シ
ステムにより異なります。
gentype native_log10 (gentype x)
10を底とする対数の
計算をします。範囲は実
装システムにより異なり
ます。
gentype native_powr (gentype x, gentype y)
x >= 0の制限下でxの
y乗を計算します。引数x
とyの範囲は実装システム
により異なります。
gentype native_recip (gentype x)

逆数の計算をします。
範囲は実装システムによ
り異なります。

gentype native_rsqrt (gentype x)
平方根の逆数を計算し
ます。範囲は実装シス
テムにより異なります。
gentype native_sin (gentype x)

正弦(sine)の計算
をします。範囲は実装
システムにより異なり
ます。

gentype native_sqrt (gentype x)
平方根を計算します。
範囲は実装システムに
より異なります。

gentype native_tan (gentype x)

正接(tangent)の計
算をします。範囲は実装
システムにより異なり
ます。


B.38.4. 浮動小数点演算

浮動小数点境界値

Table B.105. 表:浮動小数点境界値

関数詳細
MAXFLOAT
単精度浮動小数点数
の有限の最大値です。
HUGE_VALF
+infinityと等号する
float型の定数です。
数値関数のエラー値とし
て使われます。
INFINITY
正の符号または符号な
しの無限を表すfloat型
の定数。

NAN
quiet NaN(qNaN)
を表すfloat型の定数。
HUGE_VAL
+infinityと等号する
double型の定数です。
数値関数のエラー値とし
て使われます。

浮動小数点数

表:浮動小数点マクロ. 

#define FLT_DIG          6
#define FLT_MANT_DIG     24
#define FLT_MAX_10_EXP   +38
#define FLT_MAX_EXP      +128
#define FLT_MIN_10_EXP   -37
#define FLT_MIN_EXP      -125
#define FLT_RADIX        2
#define FLT_MAX          0x1.fffffep127f
#define FLT_MIN          0x1.0p-126f
#define FLT_EPSILON      0x1.0p-23f

Table B.106. 表:浮動小数点との互換性

OpenCL CマクロOpenCL APIマクロ 
FLT_DIG
CL_FLT_DIG

FLT_MANT_DIG

CL_FLT_MANT_DIG
FLT_MAX_10_EXP
CL_FLT_MAX_10_EXP

FLT_MAX_EXP
CL_FLT_MAX_EXP
FLT_MIN_10_EXP
CL_FLT_MIN_10_EXP

FLT_MIN_EXP

CL_FLT_MIN_EXP
FLT_RADIX
CL_FLT_RADIX
FLT_MAX
CL_FLT_MAX

FLT_MIN
CL_FLT_MIN

FLT_EPSILSON

CL_FLT_EPSILON

Table B.107. 表:浮動小数点定数

定数 詳細 
M_E_F
eの値
M_LOG2E_F
log2eの値

M_LOG10E_F

log10eの値
M_LN2_F
loge2の値

M_LN10_F

loge10の値
M_PI_F
πの値

M_PI_2_F

π / 2の値

M_PI_4_F

π / 4の値
M_1_PI_F
1 / πの値
M_2_PI_F
2 / πの値
M_2_SQRTPI_F
2 / √πの値
M_SQRT2_F
√2の値
M_SQRT1_2_F
1 / √2の値

B.38.5. 倍精度

Note

詳しくは「表:倍精度型マクロ」(表:倍精度型マクロ)と「表:倍精度型の互換性」(Table B.108, “表:倍精度型の互換性”)と「表:倍精度定数」(Table B.109, “表:倍精度定数”)を参照ください。

表:倍精度型マクロ. 

#define DBL_DIG 15
#define DBL_MANT_DIG 53
#define DBL_MAX_10_EXP +308
#define DBL_MAX_EXP +1024
#define DBL_MIN_10_EXP -307
#define DBL_MIN_EXP -1021
#define DBL_MAX 0x1.fffffffffffffp1023
#define DBL_MIN 0x1.0p-1022
#define DBL_EPSILON 0x1.0p-52

Table B.108. 表:倍精度型の互換性

OpenCL Cマクロ OpenCL APIマクロ 
DBL_DIG
CL_DBL_DIG

DBL_MANT_DIG
CL_DBL_MANT_DIG

DBL_MAX_10_EXP

CL_DBL_MAX_10_EXP
DBL_MAX_EXP
CL_DBL_MAX_EXP

DBL_MIN_10_EXP
CL_DBL_MIN_10_EXP

DBL_MIN_EXP
CL_DBL_MIN_EXP

DBL_MAX
CL_DBL_MAX

DBL_MIN
CL_DBL_MIN

DBL_EPSILSON

CL_DBL_EPSILON

Table B.109. 表:倍精度定数

定数詳細
M_E
eの値
M_LOG2E

log2eの値

M_LOG10E
log10eの値
M_LN2
loge2の値
M_LN10
loge10の値
M_PI
πの値
M_PI_2
π / 2の値
M_PI_4
π / 4の値

M_1_PI
1 / πの値
M_2_PI
2 / πの値
M_2_SQRTPI
2 / √πの値

M_SQRT2

√2の値

M_SQRT1_2
1 / √2の値

Copyright 2018-2019, by Masaki Komatsu