我有一个维数为d的双精度数组a
(这是2的幂,让我们说64到1024之间)。
现在我想以概率1/2翻转每个元素的符号(并记住已被翻转的位置!)。
我现在所做的是生成第二个双打b
数组,只有1和-1,然后:
for (int i=0; i<d; i++) a[i] = a[i]*b[i];
我想知道是否有更快的方法可以做到这一点。我们技术上只需要1位来记忆1 / -1,我想我们可以避免乘法......但我不确定最好的方法是什么。
我尝试了以下内容:
for (int i=0; i<d; i++){
if (b[i]<0)
a[i]=-a[i];
}
避免乘法,但这并不快(实际上甚至稍慢)。