インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

算術演算子

次の表は、Fvec クラスの算術演算子と一般的な構文を列挙したものです。この算術演算子はそれぞれ「標準演算」と「高度な演算」に分かれています。この 2 つについてはこのセクションの後半で詳しく解説します。

Fvec 算術演算子

カテゴリー

演算

演算子

一般的な構文

スタンダード

加算

+
+=

R = A + B;
R += A;

 

減算

-
-=

R = A - B;
R -= A;

 

乗算

*
*=

R = A * B;
R *= A;

 

除算

/
/=

R = A / B;
R /= A;

高度な演算

平方根

sqrt

R = sqrt(A);

 

逆数
(ニュートンラフソン法)

rcp
rcp_nr

R = rcp(A);
R = rcp_nr(A);

 

平方根の逆数
(ニュートンラフソン法)

rsqrt
rsqrt_nr

R = rsqrt(A);
R = rsqrt_nr(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;
F32vec4 R += F32vec4 A;

_mm_add_ps

 

2 double

F64vec2 R = F64vec2 A + F32vec2 B;
F64vec2 R += F64vec2 A;

_mm_add_pd

 

1 float

F32vec1 R = F32vec1 A + F32vec1 B;
F32vec1 R += F32vec1 A;

_mm_add_ss

減算

4 float

F32vec4 R = F32vec4 A - F32vec4 B;
F32vec4 R -= F32vec4 A;

_mm_sub_ps

 

2 double

F64vec2 R - F64vec2 A + F32vec2 B;
F64vec2 R -= F64vec2 A;

_mm_sub_pd

 

1 float

F32vec1 R = F32vec1 A - F32vec1 B;
F32vec1 R -= F32vec1 A;

_mm_sub_ss

乗算

4 float

F32vec4 R = F32vec4 A * F32vec4 B;
F32vec4 R *= F32vec4 A;

_mm_mul_ps

 

2 double

F64vec2 R = F64vec2 A * F364vec2 B;
F64vec2 R *= F64vec2 A;

_mm_mul_pd

 

1 float

F32vec1 R = F32vec1 A * F32vec1 B;
F32vec1 R *= F32vec1 A;

_mm_mul_ss

除算

4 float

F32vec4 R = F32vec4 A / F32vec4 B;
F32vec4 R /= F32vec4 A;

_mm_div_ps

 

2 double

F64vec2 R = F64vec2 A / F64vec2 B;
F64vec2 R /= F64vec2 A;

_mm_div_pd

 

1 float

F32vec1 R = F32vec1 A / F32vec1 B;
F32vec1 R /= F32vec1 A;

_mm_div_ss

「高度な算術演算子」の使用方法

次の表は、高度な算術演算子のクラスごとに戻り値を列挙したものです。「戻り値の表記法」の前半に述べた構文が使われます。

高度な算術演算子の戻り値の対応表

R 演算子 A F32vec4 F64vec2 F32vec1

R0:=

sqrt

rcp

rsqrt

rcp_nr

rsqrt_nr

A0

X

R1:=

sqrt

rcp

rsqrt

rcp_nr

rsqrt_nr

A1

N/A

R2:=

sqrt

rcp

rsqrt

rcp_nr

rsqrt_nr

A2

N/A

N/A

R3:=

sqrt

rcp

rsqrt

rcp_nr

rsqrt_nr

A3

N/A

N/A

f :=

add_horizontal

 

 

(A0 + A1 + A2 + A3)

 

 

N/A

N/A

d :=

add_horizontal

 

 

(A0 + A1)

 

 

N/A

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
_mm_add_ps
_mm_mul_ps
_mm_rcp_ps

2 double

F64vec2 R = rcp_nr(F64vec2 A);

_mm_sub_pd
_mm_add_pd
_mm_mul_pd
_mm_rcp_pd

1 float

F32vec1 R = rcp_nr(F32vec1 A);

_mm_sub_ss
_mm_add_ss
_mm_mul_ss
_mm_rcp_ss

平方根の逆数 (ニュートンラフソン法)

4 float

F32vec4 R = rsqrt_nr(F32vec4 A);

_mm_sub_pd
_mm_mul_pd
_mm_rsqrt_ps

2 double

F64vec2 R = rsqrt_nr(F64vec2 A);

_mm_sub_pd
_mm_mul_pd
_mm_rsqrt_pd

1 float

F32vec1 R = rsqrt_nr(F32vec1 A);

_mm_sub_ss
_mm_mul_ss
_mm_rsqrt_ss

水平加算

1 float

float f = add_horizontal(F32vec4 A);

_mm_add_ss
_mm_shuffle_ss

1 double

double d = add_horizontal(F64vec2 A);

_mm_add_sd
_mm_shuffle_sd