サンプルコード試験DIV()と組み合わせて分割& MOD。私はgcc -O3でこれらをコンパイルしました。私はdoNothingの呼び出しを追加してコンパイラがすべてを最適化するのを止めなければなりませんでした(出力はdivision + 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
以下のすべての回答は妥当と思われますが、私はちょうど 'ダブル '(あなたの最後のアイテム)のマックは私には悪いアイデアのように思えます、あなたは整列していない数字に終わるでしょうパフォーマンスと実行可能なサイズであなたを犠牲にすることができます(特定の組み込みシステムではいつも問題でした)。 – nhed
3つ目はBADオプションです:tmp = 54.999999999999943157の場合はどうなりますか? これは古いスタイルのキャスティングは決して賢明なことではないと言いました。 – jimifiki