Fvecクラスの条件付き選択演算子

各条件付き関数は、単精度浮動小数点値であるABを比較します。パラメータCDは戻り値に使用されます。Fvecクラスのオブジェクト同士を比較したときの戻り値のデータ型は、比較したオブジェクトと同じデータ型になります。

Fvecクラスの条件付き選択演算子

条件付き選択の条件 演算子 構文

等しい

select_eq

R = select_eq(A, B)

等しくない

select_neq

R = select_neq(A, B)

より大きい

select_gt

R = select_gt(A, B)

select_ge

R = select_ge(A, B)

より大きくない

select_gt

R = select_gt(A, B)

≧ではない

select_ge

R = select_ge(A, B)

より小さい

select_lt

R = select_lt(A, B)

select_le

R = select_le(A, B)

より小さくない

select_nlt

R = select_nlt(A, B)

≦ではない

select_nle

R = select_nle(A, B)

条件付き選択演算子の使用

条件付き選択演算子では、比較結果が真の場合は戻り値がCに格納され、偽の場合はDに格納されます。次の表は、条件付き選択演算子のクラスごとの戻り値を列挙したものです。 各戻り値は、先に説明した「戻り値の表記法」に従っています。

比較演算子の戻り値の対応表

R A0 演算子 B C D F32vec4 F64vec2 F32vec1

R0:=

(A1

!(A1

select_[eq | lt | le | gt | ge]
select_[ne | nlt | nle | ngt | nge]

B0)
B0)

C0
C0

D0
D0

X

X

X

R1:=

(A2

!(A2

select_[eq | lt | le | gt | ge]
select_[ne | nlt | nle | ngt | nge]

B1)
B1)

C1
C1

D1
D1

X

X

非対応

R2:=

(A2

!(A2

select_[eq | lt | le | gt | ge]
select_[ne | nlt | nle | ngt | nge]

B2)
B2)

C2
C2

D2
D2

X

非対応

非対応

R3:=

(A3

!(A3

select_[eq | lt | le | gt | ge]
select_[ne | nlt | nle | ngt | nge]

B3)
B3)

C3
C3

D3
D3

X

非対応

非対応

次の表に、条件付き選択演算および対応する組込み関数の例をいくつか示します。

Fvecクラスの条件付き選択演算

戻り値 構文の使用例 組込み関数
「=」かどうかの比較

floatが4個

F32vec4 R = select_eq(F32vec4 A);

_mm_cmpeq_ps

doubleが2個

F64vec2 R = select_eq(F64vec2 A);

_mm_cmpeq_pd

floatが1個

F32vec1 R = select_eq(F32vec1 A);

_mm_cmpeq_ss

「≠」かどうかの比較

floatが4個

F32vec4 R = select_neq(F32vec4 A);

_mm_cmpneq_ps

doubleが2個

F64vec2 R = select_neq(F64vec2 A);

_mm_cmpneq_pd

floatが1個

F32vec1 R = select_neq(F32vec1 A);

_mm_cmpneq_ss

「<」かどうかの比較

floatが4個

F32vec4 R = select_lt(F32vec4 A);

_mm_cmplt_ps

doubleが2個

F64vec2 R = select_lt(F64vec2 A);

_mm_cmplt_pd

floatが1個

F32vec1 R = select_lt(F32vec1 A);

_mm_cmplt_ss

「≦」かどうかの比較

floatが4個

F32vec4 R = select_le(F32vec4 A);

_mm_cmple_ps

doubleが2個

F64vec2 R = select_le(F64vec2 A);

_mm_cmple_pd

floatが1個

F32vec1 R = select_le(F32vec1 A);

_mm_cmple_ps

「>」かどうかの比較

floatが4個

F32vec4 R = select_gt(F32vec4 A);

_mm_cmpgt_ps

doubleが2個

F64vec2 R = select_gt(F64vec2 A);

_mm_cmpgt_pd

floatが1個

F32vec1 R = select_gt(F32vec1 A);

_mm_cmpgt_ss

「≧」かどうかの比較

floatが4個

F32vec1 R = select_ge(F32vec4 A);

_mm_cmpge_ps

doubleが2個

F64vec2 R = select_ge(F64vec2 A);

_mm_cmpge_pd

floatが1個

F32vec1 R = select_ge(F32vec1 A);

_mm_cmpge_ss

「<ではない」かどうかの比較

floatが4個

F32vec1 R = select_nlt(F32vec4 A);

_mm_cmpnlt_ps

doubleが2個

F64vec2 R = select_nlt(F64vec2 A);

_mm_cmpnlt_pd

floatが1個

F32vec1 R = select_nlt(F32vec1 A);

_mm_cmpnlt_ss

「≦ではない」かどうかの比較

floatが4個

F32vec1 R = select_nle(F32vec4 A);

_mm_cmpnle_ps

doubleが2個

F64vec2 R = select_nle(F64vec2 A);

_mm_cmpnle_pd

floatが1個

F32vec1 R = select_nle(F32vec1 A);

_mm_cmpnle_ss

「>ではない」かどうかの比較

floatが4個

F32vec1 R = select_ngt(F32vec4 A);

_mm_cmpngt_ps

doubleが2個

F64vec2 R = select_ngt(F64vec2 A);

_mm_cmpngt_pd

floatが1個

F32vec1 R = select_ngt(F32vec1 A);

_mm_cmpngt_ss

「≧ではない」かどうかの比較

floatが4個

F32vec1 R = select_nge(F32vec4 A);

_mm_cmpnge_ps

doubleが2個

F64vec2 R = select_nge(F64vec2 A);

_mm_cmpnge_pd

floatが1個

F32vec1 R = select_nge(F32vec1 A);

_mm_cmpnge_ss