gpt4 book ai didi

compiler-construction - 如何为这段代码创建无分支代码?

转载 作者:行者123 更新时间:2023-12-02 06:27:49 26 4
gpt4 key购买 nike

我需要为内部循环中的 if 语句生成无分支代码如果(我!= j)。我很困惑如何生成无分支代码。

  for (int i = start; i < n; i++)
{
results[i] = 999;
for (int j = 0; j < n; j++)
{
if (i != j)
{
d = myfunction(x, y, i, j);
if (d < results[i])
results[i] = d;
}
}
}

最佳答案

在 C++ 中,比较返回 0(假)或 1(真)。所以你可以将最里面的条件转换如下:

int condition = d < results[i] 
results[i] = d * condition + results[i] * !condition;

要跳过内循环中的 i,只需在 i 及之后的参数中添加 1:

...
for (int j = 0; j < n - 1; j++) {
d = myfunction(x, y, i, j + (j >= i));
int condition = d < results[i]
results[i] = d * condition + results[i] * !condition;
}
...

比较次数较少的另一种选择是将内部循环分成两个循环:

for (int j = 0; j < i; j++) {
...
}
for (int j = i + i; j < n; j++) {
...
}

编辑:复杂增量/循环开始修饰被替换。

P.S.:优化选项可能是在局部变量中构建最小值并仅在内部循环之后分配给 results[i]。

关于compiler-construction - 如何为这段代码创建无分支代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47240899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com