샘플 코드 테스트 DIV()와 함께 분할 & 개조. 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
아래의 모든 대답은 합리적인 것처럼 보입니다. 나는 'double'(마지막 항목)이있는 어떤 mucking도 나에게 나쁜 생각을하는 것처럼 보인다고 덧붙이고 싶습니다. 줄을 서지 않는 숫자로 끝나고, 성능 및 실행 가능한 크기로 비용을 부담 할 수 있습니다 (특정 임베디드 시스템에서 항상 문제가되었습니다). – nhed
세 번째는 BAD 옵션입니다. tmp = 54.999999999999943157 일 경우 어떻게해야합니까? 이것은 오래된 스타일의 캐스팅이 결코 영리한 일이 아니라고 말했습니다. – jimifiki