Code:
#include <iostream>
#include <sys/timeb.h>
#include <cstdlib>
using namespace std;
timeb start_time;
void start() {
ftime(&start_time);
}
void stop() {
timeb now;
ftime(&now);
cout << (now.time - start_time.time)*1.0 + (now.millitm - start_time.millitm)/1000.0 << endl;
}
inline unsigned int f(unsigned int x) {
unsigned int n = 858993459U;
unsigned int n2 = 1717986918U;
unsigned int p = 3435973837U;
unsigned int r = p*++x;
while (r >= n2)
r -= n2;
if (r >= n)
r -= n;
return --r;
}
int main() {
unsigned int i = 0;
start();
do {
int x = i;
i = x;
++i;
} while (i != 0);
stop();
i = 0;
start();
do {
int x = i;
i = i / 5;
i = x;
++i;
} while (i != 0);
stop();
i = 0;
start();
do {
int x = i;
i = f(i);
i = x;
++i;
} while (i != 0);
stop();
return EXIT_SUCCESS;
}
#include <iostream>
#include <sys/timeb.h>
#include <cstdlib>
using namespace std;
timeb start_time;
void start() {
ftime(&start_time);
}
void stop() {
timeb now;
ftime(&now);
cout << (now.time - start_time.time)*1.0 + (now.millitm - start_time.millitm)/1000.0 << endl;
}
inline unsigned int f(unsigned int x) {
unsigned int n = 858993459U;
unsigned int n2 = 1717986918U;
unsigned int p = 3435973837U;
unsigned int r = p*++x;
while (r >= n2)
r -= n2;
if (r >= n)
r -= n;
return --r;
}
int main() {
unsigned int i = 0;
start();
do {
int x = i;
i = x;
++i;
} while (i != 0);
stop();
i = 0;
start();
do {
int x = i;
i = i / 5;
i = x;
++i;
} while (i != 0);
stop();
i = 0;
start();
do {
int x = i;
i = f(i);
i = x;
++i;
} while (i != 0);
stop();
return EXIT_SUCCESS;
}
Izvršio sam program tri puta i sva triputa dobio da je od rei izlistana vremena drugo vreme kraće od prvog, tj. da se prva petlja "ubrza" dodavanjem naredbe i = i / 5;. Kako to objašnjavate?
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.