2011-02-06 7 views
1

부호없는 64 비트 나눗셈에 대해 몫과 나머지가 필요한 함수가 있습니다. lldiv 및 lldiv_t와 같으며 int이 아닌 long long int이 서명됩니다. 서명되지 않은 버전이 있습니까? 그렇지 않다면, 이것을 처리하는 가장 좋은 방법은 무엇입니까?C에서 lldiv의 서명되지 않은 버전입니까?

속도는 중요합니다 (보통 수십억 조 또는 수조의 연산과 같음). 그러나 컴파일러 일 수도 있습니다.은 이것을 제대로 처리 할만큼 똑똑 할 수 있습니다. gcc 4.3.3을 사용하고 있습니다.

답변

4

그냥 나누기 및 나머지 연산자를 사용하십시오. 건전한 컴파일러는 div, ldiv 또는 lldiv 호출보다 훨씬 최적화 된 작업을 수행합니다.

+1

+1. 참고로, GCC는 일반적으로 long long/unsigned long long의 division을 libgcc로 변환합니다. 일반적으로 시스템 (또는 아키텍처)을 대상으로합니다. /와 %는 함께가는 방법이며, -O [123]와 함께 코드를 더 깔끔하게 만듭니다. –

+0

@Matthew : 참고로, 실제로 asm으로 작성된 libgcc의 함수 버전을 정의하여 성능을 크게 향상시킬 수 있습니다. 예를 들어, gcc의'__udivdi3'는 분자의 상위 워드가 분모보다 작은 64/32 -> 32 division이 하나의'div' 명령어라는 사실을 절대 사용하지 않습니다. 이 점을주의 깊게 살펴보면 대부분의 실제 호출을'__udivdi3'으로 대체 할 수 있습니다. 물론 gcc가 할 수있을 때'__udivdi3'를 호출하기 전에이 최적화 *를해야합니다. 그러나 우리 모두 gcc를 알고 있습니다 .... –

관련 문제