Конвертируйте число с плавающей точкой в ​​int, если диапазон переполнения int равен max int или min int

Я хочу найти метод, который конвертирует 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

Решение

Вы можете использовать этот код, который вычисляет вектор с 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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector