算術演算子

次の表は、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クラスの標準算術演算

操作 戻り値 構文の使用例 組込み関数

加算

floatが4個

F32vec4 R = F32vec4 A + F32vec4 B;

F32vec4 R += F32vec4 A;

_mm_add_ps

 

doubleが2個

F64vec2 R = F64vec2 A + F32vec2 B;

F64vec2 R += F64vec2 A;

_mm_add_pd

 

floatが1個

F32vec1 R = F32vec1 A + F32vec1 B;

F32vec1 R += F32vec1 A;

_mm_add_ss

減算

floatが4個

F32vec4 R = F32vec4 A - F32vec4 B;

F32vec4 R -= F32vec4 A;

_mm_sub_ps

 

doubleが2個

F64vec2 R - F64vec2 A + F32vec2 B;

F64vec2 R -= F64vec2 A;

_mm_sub_pd

 

floatが1個

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

_mm_sub_ss

乗算

floatが4個

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

_mm_mul_ps

 

doubleが2個

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

_mm_mul_pd

 

floatが1個

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

_mm_mul_ss

除算

floatが4個

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

_mm_div_ps

 

doubleが2個

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

_mm_div_pd

 

floatが1個

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

 

 

 

R1:=

sqrt

rcp

rsqrt

rcp_nr

rsqrt_nr

A1

 

 

非対応

R2:=

sqrt

rcp

rsqrt

rcp_nr

rsqrt_nr

A2

 

非対応

非対応

R3:=

sqrt

rcp

rsqrt

rcp_nr

rsqrt_nr

A3

 

非対応

非対応

f :=

add_horizontal

(A0 + A1 + A2 + A3)

 

非対応

非対応

d :=

add_horizontal

(A0 + A1)

非対応

 

非対応

次の表に、高度な算術演算子の例をいくつか示します。

Fvecクラス用の高度な算術演算

戻り値 構文の使用例 組込み関数
平方根

floatが4個

F32vec4 R = sqrt(F32vec4 A);

_mm_sqrt_ps

doubleが2個

F64vec2 R = sqrt(F64vec2 A);

_mm_sqrt_pd

floatが1個

F32vec1 R = sqrt(F32vec1 A);

_mm_sqrt_ss

逆数

floatが4個

F32vec4 R = rcp(F32vec4 A);

_mm_rcp_ps

doubleが2個

F64vec2 R = rcp(F64vec2 A);

_mm_rcp_pd

floatが1個

F32vec1 R = rcp(F32vec1 A);

_mm_rcp_ss

平方根の逆数

floatが4個

F32vec4 R = rsqrt(F32vec4 A);

_mm_rsqrt_ps

doubleが2個

F64vec2 R = rsqrt(F64vec2 A);

_mm_rsqrt_pd

floatが1個

F32vec1 R = rsqrt(F32vec1 A);

_mm_rsqrt_ss

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

floatが4個

F32vec4 R = rcp_nr(F32vec4 A);

_mm_sub_ps
_mm_add_ps

_mm_mul_ps

_mm_rcp_ps

doubleが2個

F64vec2 R = rcp_nr(F64vec2 A);

_mm_sub_pd
_mm_add_pd

_mm_mul_pd

_mm_rcp_pd

floatが1個

F32vec1 R = rcp_nr(F32vec1 A);

_mm_sub_ss
_mm_add_ss

_mm_mul_ss

_mm_rcp_ss

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

floatが4個

F32vec4 R = rsqrt_nr(F32vec4 A);

_mm_sub_pd
_mm_mul_pd

_mm_rsqrt_ps

doubleが2個

F64vec2 R = rsqrt_nr(F64vec2 A);

_mm_sub_pd
_mm_mul_pd

_mm_rsqrt_pd

floatが1個

F32vec1 R = rsqrt_nr(F32vec1 A);

_mm_sub_ss
_mm_mul_ss

_mm_rsqrt_ss

水平加算

floatが1個

float f = add_horizontal(F32vec4 A);

_mm_add_ss
_mm_shuffle_ss

doubleが1個

double d = add_horizontal(F64vec2 A);

_mm_add_sd

_mm_shuffle_sd