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
思われます。(最後の項目)をいじくり回すのは悪い考えのように思えます。数字が揃わず、パフォーマンスが低下する可能性があります。実行可能サイズ(特定の組み込みシステムでは常に問題でした)。