インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
次の表は、Fvec クラスの算術演算子と一般的な構文を列挙したものです。この算術演算子はそれぞれ「標準演算」と「高度な演算」に分かれています。この 2 つについてはこのセクションの後半で詳しく解説します。
カテゴリー |
演算 |
演算子 |
一般的な構文 |
---|---|---|---|
スタンダード |
加算 |
+ |
R = A + B; |
|
減算 |
- |
R = A - B; |
|
乗算 |
* |
R = A * B; |
|
除算 |
/ |
R = A / B; |
高度な演算 |
平方根 |
sqrt |
R = sqrt(A); |
|
逆数 |
rcp |
R = rcp(A); |
|
平方根の逆数 |
rsqrt |
R = rsqrt(A); |
次の 2 つの表は、標準算術演算子のクラスごとに戻り値を列挙したものです。「戻り値の表記法」の前半に述べた構文が使われます。
標準算術演算の戻り値の対応表
R | A | 演算子 | B | F32vec4 | F64vec2 | F32vec1 | |||
---|---|---|---|---|---|---|---|---|---|
R0:= |
A0 |
+ |
- |
* |
/ |
B0 |
〇 |
〇 |
〇 |
R1:= |
A1 |
+ |
- |
* |
/ |
B1 |
〇 |
〇 |
× |
R2:= |
A2 |
+ |
- |
* |
/ |
B2 |
〇 |
× |
× |
R3:= |
A3 |
+ |
- |
* |
/ |
B3 |
〇 |
× |
× |
代入付き算術演算の戻り値の対応表
R | 演算子 | A | F32vec4 | F64vec2 | F32vec1 | |||
---|---|---|---|---|---|---|---|---|
R0:= |
+= |
-= |
*= |
/= |
A0 |
〇 |
〇 |
〇 |
R1:= |
+= |
-= |
*= |
/= |
A1 |
〇 |
〇 |
× |
R2:= |
+= |
-= |
*= |
/= |
A2 |
〇 |
× |
× |
R3:= |
+= |
-= |
*= |
/= |
A3 |
〇 |
× |
× |
次の表は、標準算術演算子の構文と組込み関数を列挙したものです。
Fvec クラスの標準算術演算
演算 |
戻り値 |
構文の使用例 |
組込み関数 |
---|---|---|---|
加算 |
4 float |
F32vec4 R = F32vec4 A + F32vec4 B; |
_mm_add_ps |
|
2 double |
F64vec2 R = F64vec2 A + F32vec2 B; |
_mm_add_pd |
|
1 float |
F32vec1 R = F32vec1 A + F32vec1 B; |
_mm_add_ss |
減算 |
4 float |
F32vec4 R = F32vec4 A - F32vec4 B; |
_mm_sub_ps |
|
2 double |
F64vec2 R - F64vec2 A + F32vec2 B; |
_mm_sub_pd |
|
1 float |
F32vec1 R = F32vec1 A - F32vec1 B; |
_mm_sub_ss |
乗算 |
4 float |
F32vec4 R = F32vec4 A * F32vec4 B; |
_mm_mul_ps |
|
2 double |
F64vec2 R = F64vec2 A * F364vec2 B; |
_mm_mul_pd |
|
1 float |
F32vec1 R = F32vec1 A * F32vec1 B; |
_mm_mul_ss |
除算 |
4 float |
F32vec4 R = F32vec4 A / F32vec4 B; |
_mm_div_ps |
|
2 double |
F64vec2 R = F64vec2 A / F64vec2 B; |
_mm_div_pd |
|
1 float |
F32vec1 R = F32vec1 A / F32vec1 B; |
_mm_div_ss |
次の表は、高度な算術演算子のクラスごとに戻り値を列挙したものです。「戻り値の表記法」の前半に述べた構文が使われます。
高度な算術演算子の戻り値の対応表
R | 演算子 | A | F32vec4 | F64vec2 | F32vec1 | ||||
---|---|---|---|---|---|---|---|---|---|
R0:= |
sqrt |
rcp |
rsqrt |
rcp_nr |
rsqrt_nr |
A0 |
X |
X |
X |
R1:= |
sqrt |
rcp |
rsqrt |
rcp_nr |
rsqrt_nr |
A1 |
X |
X |
N/A |
R2:= |
sqrt |
rcp |
rsqrt |
rcp_nr |
rsqrt_nr |
A2 |
X |
N/A |
N/A |
R3:= |
sqrt |
rcp |
rsqrt |
rcp_nr |
rsqrt_nr |
A3 |
X |
N/A |
N/A |
f := |
add_horizontal |
|
|
(A0 + A1 + A2 + A3) |
|
|
X |
N/A |
N/A |
d := |
add_horizontal |
|
|
(A0 + A1) |
|
|
N/A |
X |
N/A |
次の表に、高度な算術演算子の例をいくつか示します。
Fvec クラス用の高度な算術演算
戻り値 |
構文の使用例 |
組込み関数 |
---|---|---|
平方根 | ||
4 float |
F32vec4 R = sqrt(F32vec4 A); |
_mm_sqrt_ps |
2 double |
F64vec2 R = sqrt(F64vec2 A); |
_mm_sqrt_pd |
1 float |
F32vec1 R = sqrt(F32vec1 A); |
_mm_sqrt_ss |
逆数 | ||
---|---|---|
4 float |
F32vec4 R = rcp(F32vec4 A); |
_mm_rcp_ps |
2 double |
F64vec2 R = rcp(F64vec2 A); |
_mm_rcp_pd |
1 float |
F32vec1 R = rcp(F32vec1 A); |
_mm_rcp_ss |
平方根の逆数 | ||
---|---|---|
4 float |
F32vec4 R = rsqrt(F32vec4 A); |
_mm_rsqrt_ps |
2 double |
F64vec2 R = rsqrt(F64vec2 A); |
_mm_rsqrt_pd |
1 float |
F32vec1 R = rsqrt(F32vec1 A); |
_mm_rsqrt_ss |
逆数 (ニュートンラフソン法) | ||
---|---|---|
4 float |
F32vec4 R = rcp_nr(F32vec4 A); |
_mm_sub_ps |
2 double |
F64vec2 R = rcp_nr(F64vec2 A); |
_mm_sub_pd |
1 float |
F32vec1 R = rcp_nr(F32vec1 A); |
_mm_sub_ss |
平方根の逆数 (ニュートンラフソン法) | ||
---|---|---|
4 float |
F32vec4 R = rsqrt_nr(F32vec4 A); |
_mm_sub_pd |
2 double |
F64vec2 R = rsqrt_nr(F64vec2 A); |
_mm_sub_pd |
1 float |
F32vec1 R = rsqrt_nr(F32vec1 A); |
_mm_sub_ss |
水平加算 | ||
---|---|---|
1 float |
float f = add_horizontal(F32vec4 A); |
_mm_add_ss |
1 double |
double d = add_horizontal(F64vec2 A); |
_mm_add_sd |