C++ 优化c+中的八叉树八进制确定函数+;

C++ 优化c+中的八叉树八进制确定函数+;,c++,octree,C++,Octree,我正在建造一个空间八叉树。为了确定某个点(x,y,z)应放置在哪个分支/八分之一点,我使用以下函数: if (x>x_centre) { xsign = 1; } else { xsign = 0; } if (y>y_centre) { ysign = 1; } else { ysign = 0; } if (z>z_centre) { zsign = 1; } else { zsign = 0; } return xsi

我正在建造一个空间八叉树。为了确定某个点(x,y,z)应放置在哪个分支/八分之一点,我使用以下函数:

if (x>x_centre) {
    xsign = 1;
}
else {
    xsign = 0;
}

if (y>y_centre) {
    ysign = 1;
}
else {
    ysign = 0;
}

if (z>z_centre) {
    zsign = 1;
}
else {
    zsign = 0;
}

return xsign + 2*ysign + 4*zsign;
它返回一个0到7之间的数字,每个八分之一都是唯一的。事实证明,这个片段多次被称为大片段。当建造大树时,它会非常耗时

有没有简单的方法来加速这个过程

此allready可提供30%的加速:

xsign = x>x_centre;
ysign = y>y_centre;
zsign = z>y_centre;

return xsign + 2*ysign + 4*zsign;

任何其他提示?

使用三元运算符可能是一种选择。有两件事:您可以将函数标记为
inline
,希望编译器在调用站点内联代码。其次,请记住
true
相当于
1
false
相当于
0
。最后一位将帮助您丢弃
if
语句。如果我必须在我的树中放置一千万项,则平均深度为log(一千万)/log(8)=8。所以我不可避免地要调用这个函数八千万次。你说的预测失误是什么意思?@JoachimPileborg,谢谢!allready的性能提高了30%。最终版本可能会尽可能好。查看编译器正在创建的汇编代码(并在此处发布)。