1

我想找到一种方法,当溢出范围时转换float为max或 min 。intintintint

现在我有这样的方法

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 来加快速度。

我想得到一个更快的方法,非常感谢。

4

1 回答 1

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);
于 2012-12-31T06:06:29.300 回答