将float转换为int,当int的溢出范围时,将其设为max int或min int

时间:2012-12-30 19:48:33

标签: c++ sse typeconverter

我希望找到一种将float转换为int的方法,当溢出范围为int时,将其设为最大int或最小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;

但我觉得这很慢(需要两个比较),我想在转换很多值时使用SSE加速。

我希望得到更快捷的方法,非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用此代码计算具有4个浮点数的向量。 你必须在开头包括“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);