通常の値の場合1
は true を表し0
、falseの場合は を使用します。
float a = 1.0f;
float b = 2.0f;
float c = (a > b); // this will be 0.0f
ただし、ベクトルの場合、1111...111
(32 個のバイナリ 1) は true を表し0
、false を表すために使用されます。float では、32 個の 2 進数の 1 は -nan (マイナス記号の付いた数値ではない) です。
typedef float v4 __attribute__((vector_size(sizeof(float)*4)));
v4 a = {1, 2, 3, 4};
v4 b = {0 ,1, 4, 5};
v4 c = (a > b); // this becomes { -nan, -nan, 0.0f, 0.0f }
私の質問は次のとおり{ 1.0f, 1.0f, 0.0f, 0.0f }
です。「ベクトル化された」方法で
c を「変換」することは可能ですか?
max(min(value, maximum), minimal)
実際、ピクセルの RGB に対して「クランプ」( ) を実行したいと考えています。上記が達成できない場合、ベクトル化された方法でクランプを行うための他の良い方法はありますか?
PS:非組み込みの方法を好みます。