max*_*ax_ 3 c for-loop progress
我有三个嵌套的for循环,每个循环显然都有一个限制。要计算三个for循环中任何一个的进度,我要做的就是将当前迭代除以该循环将要进行的迭代总数。但是,鉴于存在三个不同的for循环,我如何计算出总的完成百分比?
int iLimit = 10, jLimit = 24, kLimit = 37;
for (int i = 0; i < iLimit; i++) {
for (int j = 0; j < jLimit; j++) {
for (int k = 0; k < kLimit; k++) {
printf("Percentage Complete = %d", percentage);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下代码,但在每个循环完成后会重置,达到大于100的百分比。
float percentage = ((i + 1) / (float)iLimit) * ((j + 1) / (float)jLimit) * ((k + 1) / (float)kLimit) * 100;
Run Code Online (Sandbox Code Playgroud)
您可以轻松计算“每个内部循环的百分比变化”
const double percentChange = 1.0 / iLimit / jLimit / kLimit;
Run Code Online (Sandbox Code Playgroud)
请注意,这在数学上等效于1/(iLimit*jLimit*kLimit),但是如果iLimit jLimit kLimit足够大,则会出现溢出和意外行为。1.0 / ...方法仍然可能发生下溢,但可能性很小。
int iLimit = 10, jLimit = 24, kLimit = 37;
const double percentChange = 1.0 / iLimit / jLimit / kLimit;
double percentage = 0;
for (int i = 0; i < iLimit; i++) {
for (int j = 0; j < jLimit; j++) {
for (int k = 0; k < kLimit; k++) {
percentage += percentChange;
printf("Percentage Complete = %d\n", (int)(percentage * 100));
}
}
}
Run Code Online (Sandbox Code Playgroud)