【发布时间】:2018-10-19 12:34:24
【问题描述】:
我有一个例程,应该测试浮点数是否小于零。如果是,我应该存储符号,我得到它是绝对值。
int sign = 1;
if (x < 0)
{
sign = -1;
}
x = fabs(x);
我查看了英特尔 SIMD 内在函数,发现这条指令dst = _mm_cmplt_ps(a,b) 生成了一个包含(0xffffffff 表示真)或(0 表示假)的向量,但我被困在那里;我怎么知道dst 向量的哪个元素是负数或不构建sign_vector。
【问题讨论】:
-
在那之后你会怎么处理
sign?您确定需要 2 的补码整数-1/+1而不是-1/ 0 或其他什么?此外,x<0是否需要是一个正确的 IEEE 比较,将x = -0.0或x = -NaN视为不是<0.0?如果是这样,您需要_mm_cmplt_ps而不是 Paul R 的符号位提取。但如果不是,Paul 的回答看起来是一个很好的方法来得到你所要求的,但你可以根据你接下来做什么来简化它。