【发布时间】:2016-03-08 01:56:11
【问题描述】:
在 SSE 中有一个函数 _mm_cvtepi32_ps(__m128i input),它接受 32 位宽有符号整数 (int32_t) 的输入向量并将它们转换为 floats。
现在,我想将输入整数解释为无符号。但是没有函数_mm_cvtepu32_ps,我找不到一个实现。你知道我在哪里可以找到这样的功能,或者至少给出实现的提示吗?
为了说明结果的差异:
unsigned int a = 2480160505; // 10010011 11010100 00111110 11111001
float a1 = a; // 01001111 00010011 11010100 00111111;
float a2 = (signed int)a; // 11001110 11011000 01010111 10000010
【问题讨论】:
-
如果您使用的是 32 位
int,则最大正值为2147483647,因此您的号码2480160505不能表示为signed int。 -
我猜 OP 的意思是
2480160505U? -
如果已知您的值在有限范围内(我认为
[0 .. 2^23],因为单精度有 23 位尾数),请尝试 Mysticial 的 64-bit unsigned to/from double 的 32 位版本。他很好地解释了该方法,您应该能够找到正确的常量来使 IEEE-754 位模式技巧起作用。