示例代码测试div()以及组合除法和mod。我用gcc -O3编译了这些代码,我不得不添加对doNothing的调用来阻止编译器优化所有内容(除法+ mod解决方案的输出为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
对我(您的最后一项)的任何污蔑在我看来都是一个坏主意,您最终会得到不符合要求的数字,并且可能会浪费您的性能和可执行文件的大小(在某些嵌入式系统上,这始终是我的问题)。