여기서 동일한 결과를 수득 2 개 코드 동안 : 코드 1최적화
#include <stdio.h>
int main(int argc, char **argv)
{
int res, nbMax = 0, i;
unsigned long j;
for (i = 1; i <= 1000000; i++) {
j = i;
int nb = 1;
while (j != 1) {
nb++;
if (j % 2 == 0) {
j = j/2;
} else {
j = 3 * j + 1;
}
}
if (nb > nbMax) { // <-
nbMax = nb;
res = i;
}
}
printf("longest: %d (%d)\n", res, nbMax);
return 0;
}
코드 2 :
#include <stdio.h>
int main(int argc, char **argv)
{
int res, nbMax = 0, i;
unsigned long j;
for (i = 1; i <= 1000000; i++) {
j = i;
int nb = 1;
while (j != 1) {
nb++;
if (nb > nbMax) { // <-
nbMax = nb;
res = i;
}
if (j % 2 == 0) {
j = j/2;
} else {
j = 3 * j + 1;
}
}
}
printf("longest: %d (%d)\n", res, nbMax);
return 0;
}
diference은 주석 블록 (IF)이다. 첫 번째 시간은 두 번째 while 루프 외부와 두 번째 내부입니다. 첫 번째 알고리즘은 두 번째 알고리즘보다 더 빠릅니다. 두 번째 알고리즘에서 해당 범위가 더 많이 실행되기 때문입니다. 그러나 첫 번째 시간은 1 초, 0.9는 두 번째 시간이됩니다 ... 어떻게 두 번째 algoirthm이 첫 번째 것보다 빠를 수 있습니까 ??
EDIT. MinGW (4.7.1)에서 작동합니다. Windows 8.1 인텔 i7-4500
재현 할 수 없습니다. amd64 gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2에서 -O3을 사용하면 첫 번째 코드는 0.30 초에서 두 번째 코드는 0.33 초까지 실행됩니다. –
동일, 내 마지막에 재현 할 수 없다 : 코드 1 : 컴파일 시간 : 0.13 초, 절대 실행 시간 : 0.35 초, CPU 시간 : 0.22 초, 메모리 피크 : 3Mb, 절대 서비스 시간 : 0.48 초' ------------------------------------------------- ------------------------------------------------ 'cod2 : 컴파일 시간 : 0.13 초, 절대 실행 시간 : 0.45 초, CPU 시간 : 0.38 초, 메모리 피크 : 3Mb, 절대 서비스 시간 : 0.58 초' http://rextester.com/ 실행 코드 –
어떤 최적화를 사용하고 있습니까? – Surt