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

Convert float to int, when overflow range of int, make it max int or min int

本文关键字:int 设置 max min float 转换 范围      更新时间:2023-10-16

我想找到一种方法,将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来加速转换多个值。

我想要一个更快速的方法,非常感谢。

您可以使用此代码计算具有4个浮点数的向量。

开头必须包含" emmintrinin .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);