Ejemplo de prueba de código div () y división y mod combinados. Los compilé con gcc -O3, tuve que agregar la llamada a doNothing para evitar que el compilador optimizara todo (la salida sería 0 para la solución division + mod).
Tómelo con un grano de sal:
#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);
}
Salidas: 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);
}
Salidas: 25
double
(su último elemento) me parece una mala idea, terminará con números que no se alinean y pueden costarle rendimiento y tamaño ejecutable (siempre fue un problema para mí en ciertos sistemas integrados).