gpt4 book ai didi

c++ - 通过循环展开加速 do-while 循环

转载 作者:行者123 更新时间:2023-11-30 04:47:21 26 4
gpt4 key购买 nike

我正在尝试加速可能被调用多次(可能超过一百万次)的函数中的代码。该代码与将两个变量设置为随机数并找到平方距离有关。我对此的第一个想法是展开循环,但由于指示它的 while 条件,我对应该如何执行它感到有点困惑。

为了加快我的程序速度,我用自定义函数替换了 c++ 内置的 rand() 函数,但我对如何使我的程序更快感到困惑。

do {
x = customRand();
y = customRand();
distance = x * x + y * y; // euclidean square distance
} while (distance >= 1.0);

最佳答案

你不应该期望通过循环展开来使你的程序更快,因为如果为随机数生成器输出选择了正确的范围 ([-1, 1]),你的循环体将被执行在超过 3/4 的情况下只有一次。

您可能希望帮助编译器将您的 while 条件标记为“不太可能”。例如,在 GCC 中它将是:

#define unlikely(x) __builtin_expect((x),0)

do {
x = customRand();
y = customRand();
distance = x * x + y * y; // euclidean square distance
} while (unlikely(distance >= 1.0));

尽管如此,即使这样也不太可能以可衡量的方式加速您的代码。

如果您关注的是保证时间而不是速度,那么对于圆内的均匀随机分布,customRand() 均匀分布在 [-1, 1]

r = std::sqrt(std::abs(customRand()));
t = M_PI * customRand();
x = r * std::cos(t);
y = r * std::sin(t);

会成功的。

关于c++ - 通过循环展开加速 do-while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56303516/

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