gpt4 book ai didi

c++ - 将 64 位循环拆分为多个整数上的 32 位循环

转载 作者:行者123 更新时间:2023-11-30 21:03:34 25 4
gpt4 key购买 nike

而不是使用一个 64 位 long类型变量作为循环计数器,我宁愿有几个 32 位循环计数器。我需要比 32 位可以容纳的循环更长的循环,在我的情况下使用 64 位会更慢。

有什么想法可以实现这一点,简单吗?

最佳答案

如果您想要的循环计数c可以分为两个都适合32位整数的因子,那么下面将使用32位循环m * n = c迭代柜台。例如,如果 c 是质数,则这将不起作用。

uint32_t m, n; // initialize according to your needs
for(uint32_t i = 0; i < m; ++i) {
for(uint32_t j = 0; j < n; ++j) {

}
}

这是一个更复杂的解决方案,应该适用于任何循环计数。您也不需要手动对数字进行因式分解。但请注意,如果循环计数不是编译时间常数,则 32 位计数器获得的任何时间肯定会被 64 位除法所损失。如果您不相信编译器会将 nr 替换为常量值,请手动进行计算。

const uint64_t c = 12000000000ull;
const uint32_t m = std::numeric_limits<uint32_t>::max();

const uint32_t n = c / m;
const uint32_t r = c % m;

for(std::uint32_t i = 0; i < n; ++i) {
for(std::uint32_t j = 0; j < m; ++j) {
do_stuff();
}
}
for(std::uint32_t i = 0; i < r; ++i) {
do_stuff();
}

关于c++ - 将 64 位循环拆分为多个整数上的 32 位循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24012550/

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