Приклад тестування коду div () та комбінованого поділу & mod. Я компілював їх за допомогою gcc -O3, мені довелося додати виклик doNothing, щоб зупинити компілятор не оптимізувати все (вихід буде 0 для рішення розділення + мод).
Візьміть його з зерном солі:
#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>
extern doNothing(int,int); // Empty function in another compilation unit
int main() {
int i;
struct timeval timeval;
struct timeval timeval2;
div_t result;
gettimeofday(&timeval,NULL);
for (i = 0; i < 1000; ++i) {
result = div(i,3);
doNothing(result.quot,result.rem);
}
gettimeofday(&timeval2,NULL);
printf("%d",timeval2.tv_usec - timeval.tv_usec);
}
Виходи: 150
#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>
extern doNothing(int,int); // Empty function in another compilation unit
int main() {
int i;
struct timeval timeval;
struct timeval timeval2;
int dividend;
int rem;
gettimeofday(&timeval,NULL);
for (i = 0; i < 1000; ++i) {
dividend = i / 3;
rem = i % 3;
doNothing(dividend,rem);
}
gettimeofday(&timeval2,NULL);
printf("%d",timeval2.tv_usec - timeval.tv_usec);
}
Виходи: 25
double
вашим (останній пункт) мені здається поганою ідеєю, ви отримаєте цифри, які не вирівнюються, і можуть коштувати вам на продуктивність і виконуваний розмір (завжди був проблемою для мене в певних вбудованих системах).