Имеет смысл, что второй сценарий должен быть более эффективным, так как ограничитель l oop не нужно рассчитывать для каждой итерации в l oop. Пытался измерить время процессора, используемое при прохождении двух типов циклов for, с помощью приведенного ниже кода. Похоже, время процессора на самом деле меньше для первого сценария для меньших чисел, таких как n = 25. но тогда для значений n> = 100 второй сценарий дает меньшее время процессора.
clock_t start,end;
double cpu_time_used;
double n, root;
n = atoi(argv[1]);
printf("n= %0f \n",n);
start = clock();
for (int i=0; i*i<n; i++);
end = clock();
cpu_time_used = ((double) (end-start)) / CLOCKS_PER_SEC;
printf("first iter: cpu_time_used: %f \n", cpu_time_used);
start = clock();
root = sqrt(n);
for (int i=0; i<=root; i++);
end = clock();
cpu_time_used = ((double) (end-start)) / CLOCKS_PER_SEC;
printf("second iter: cpu_time_used: %f \n", cpu_time_used);
Выходы:
n= 25.000000
first iter: cpu_time_used: 0.000004
second iter: cpu_time_used: 0.000011
n= 100.000000
first iter: cpu_time_used: 0.000002
second iter: cpu_time_used: 0.000001
n= 1000000.000000
first iter: cpu_time_used: 0.000011
second iter: cpu_time_used: 0.000008