而不是使用一个 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 位除法所损失。如果您不相信编译器会将 n
和 r
替换为常量值,请手动进行计算。
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/