【发布时间】:2017-02-07 20:06:42
【问题描述】:
#include <stdlib.h>
#include <cstring.h>
#include <time.h>
int cp[1000000][3];
int p[1000000][3];//assume this array to be populated
void main(){
srand(time(NULL));
for(n; n < 1000000; n++){
if (rand()%2)
memcpy(cp[n], p[n], 12);
}
}
}
这是我正在使用的实际代码的简化版本。这段代码占据了我过程的重要部分,我想知道我是否可以用一些聪明的技巧来优化它。我以前使用过指针来避免分支,但我不知道如何在这里应用它。
【问题讨论】:
-
if ((float)rand() > 0.5)对我来说没有任何意义。rand()返回 0 到 RAND_MAX,所以循环唯一一次为假的时候是它返回 0。这真的是你想要的吗? -
忘记了 RAND_MAX。现在应该可以正确书写了。
-
现在你遇到了
(rand()/RAND_MAX)是整数除法的问题,所以除非rand()返回RAND_MAX,否则它将始终为0。那么它将是 1。 -
无论如何,首先没有理由使用浮点数。
-
for(n,n<1000000,n++){大多数人不会在这里使用逗号,而是使用分号:for(int n; n<1000000; n++){
标签: c++ c optimization branch-prediction