1

floatに変換しint、 の範囲がオーバーフローしたときintに maxintまたは minにする方法を見つけたいですint

今、私はこのような方法を持っています

float x, mul = 1e5; 
int y; 

if (x * mul > (float)max_int_value)
    y = max_int_value;
else if (x * mul < (float)min_int_value)
    y = min_int_value;
else
    y = (int)x * mul;

しかし、これは非常に遅いと思います(2つの比較が必要です)。多くの値を変換するときにSSEを使用して高速化したいと考えています。

もっと手っ取り早い方法を知りたいです、ありがとうございます。

4

1 に答える 1

1

4 つの float を持つベクトルを計算するこのコードを使用できます。先頭に「emmintrin.h」を含める必要があります

float x[4]; // input vector
float y[4]; // result vector

__m128 mMaxInt = _mm_set1_ps((float)max_int_value);
__m128 mMinInt = _mm_set1_ps((float)min_int_value);
__m128 mMul = _mm_set1_ps(1e5);
__m128 mX = _mm_loadu_ps(x);
__m128 mY;

mY = _mm_mul_ps(mX, mMul);
mY = _mm_max_ps(mMinInt, mY);
mY = _mm_min_ps(mMaxInt, mY);

_mm_store_ps(y, mY);
于 2012-12-31T06:06:29.300 に答える