计算三个嵌套for循环的总体进度(%)

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)

Dan*_*iel 5

您可以轻松计算“每个内部循环的百分比变化”

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)