我有两个向量: adouble4 *sum
和 a double4 *elem
。我想对向量中的每个元素执行以下操作:如果 elem 是有限的,则从 sum 中减去它,否则,什么也不做。
目前,我有以下代码:
long4 finite = isfinite(elem[e].x);
if (finite.x) sum.x-=elem[e].x;
if (finite.y) sum.y-=elem[e].y;
if (finite.z) sum.z-=elem[e].z;
if (finite.w) sum.w-=elem[e].w;
但是,这是一堆不必要的if
陈述。它可以简单地替换为sum-=isfinite(elem[e])&elem[e];
,但似乎 & 在双打中是不允许的。但是,从硬件技术上讲,它应该是可能的,因为 & 只是在位级别上。有没有办法模仿这种行为?我应该如何最好地做到这一点?