考虑一个随机生成的
到目前为止,我尝试了以下内容,其中
__m256i
向量。是否有一种更快、更精确的方法将它们转换为__m256
浮点数向量,范围在0
(包括)和1
(不包括)之间,而不是通过float(1ull<<32)
进行除法运算?到目前为止,我尝试了以下内容,其中
iRand
是输入,ans
是输出:const __m256 fRand = _mm256_cvtepi32_ps(iRand);
const __m256 normalized = _mm256_div_ps(fRand, _mm256_set1_ps(float(1ull<<32)));
const __m256 ans = _mm256_add_ps(normalized, _mm256_set1_ps(0.5f));
0x1p-31f
。通常情况下,除法比乘法更慢或需要更多资源。 - Eric Postpischilfloat
的有效数字字段中,并使用浮点运算完成工作。但是,您显然支持31位(和一个符号),因此必须四舍五入。转换指令是为此设计的,因此您不太可能做得更好。 - Eric Postpischilsqrt(-2log(1-x))
。 - Severin Pappadeux