我想找到一种将float
转换为int
的方法,当int
的溢出范围达到最大int
或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;
但是我认为这非常慢(需要两个比较),并且我想在转换许多值时使用SSE来加快速度。
我想得到一个更快的方法,非常感谢。
最佳答案
您可以使用此代码来计算具有4个浮点数的 vector 。
您必须在开头包含“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);
关于c++ - 将float转换为int,当int的溢出范围为max int或min int时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14094056/