我有两个整数参数a
和b
。还有两个整数变量max
和min
。
我想将max
和a
的最大值分配给b
,并将min
的最小值分配给min = a < b ? a : b;
max = a > b ? a : b;
。
我需要做这个操作数百万次,所以我想优化它。我目前正在做以下事情:
{{1}}
这个问题是需要两个if语句。我想知道是否有更好的方法来做到这一点。
答案 0 :(得分:5)
std::tie(min, max) = std::minmax(a, b);
答案 1 :(得分:4)
if (a < b)
{
min = a; max = b;
}
else
{
min = b; max = a;
}
答案 2 :(得分:2)
你可能过早地进行了优化。看看编译器是做什么的。
对于只有一个条件的版本,这很简单: -
if (a < b)
{
min = a;
max = b;
}
else
{
min = b;
max = a;
}
答案 3 :(得分:1)
或者您可能想要使用一些数学:
int absdiff = abs (a-b);
int sum = a+b;
max = (sum+absdiff)/2;
min = (sum-absdiff)/2;
您可以信任编译器根据基本类型优化所有这些,您可以摆脱分支并获得恒定的执行时间(不依赖于预测变量)。
编辑:
英特尔处理器上的样本abs整数函数:
cdq
xor eax, edx
sub eax, edx
答案 4 :(得分:0)
min=a;max=b;
if(a>b) {
max=a;
min=b;
} //Here you don't even need an else statement, i don't know how much time does else take but if it does then you have saved it.