2011-09-18 2 views
5

좋아, 이상한 질문처럼 들리 겠지만 흥미로운 질문이다. 나는 iOS를 코딩하고 있으며, 속도가 빠를수록 값을 나누기보다는 항상 곱하는 것이 가장 좋습니다.나누기가 곱하기보다 느립니다.

나는 프로세서가 요즘 아마이 문제를 안타깝게 생각하지만 내 호기심이 나를 더 좋아해 주었다. 누군가 내게이 문제에 대해 밝혀 줄 수 있을지 궁금해하고있다. 보다

player.position = ccp(player.contentSize.width/2, winSize.height/2); 

느린 :

player.position = ccp(player.contentSize.width * 0.5, winSize.height * 0.5); 
+1

'player.contentSize.width' 및'winSize.height'가 부동 소수점 숫자가 아닌 한 이러한 것들은 동일하지 않습니다. – icktoofay

+1

'player.contentSize.width'와'winSize.height'가 정수인 경우, 속도에 대한 비트 시프트는 어떨까요? –

+2

이 코드는 성능이 중요한 루프에서는 거의 확실하지 않으므로 나누거나 곱할 때 거의 중요하지 않습니다. 명확하고 간결하며 견고한 코드 작성에만 중점을두고 실제로 필요한 경우 성능에 대해서만 걱정하십시오. –

답변

4

대부분의 프로세서 부문에서 동일한 데이터 형식에 대해 의 곱셈보다 느립니다. 귀하의 예제에서 승수는 부동 소수점 연산입니다. widthheight이 정수형 인 경우 결과가 매우 다를 수 있으며 프로세서와 컴파일러에 따라 다를 수 있습니다.

그러나 대부분의 컴파일러 (확실하게 GCC)는 예제 에서처럼 2의 거듭 제곱으로 나누면 더 효율적일 수있는 오른쪽 시프트로 변환됩니다. 일반적으로 곱셈 또는 나눗셈보다 빠릅니다.

7

예, 부문 곱셈에 비해 일반적으로 많은 느린
입니다 -

는 SO ..... 내 질문은 이것이다.

그러나 리터럴 (또는 컴파일 타임에 상수로 판단 될 수있는 모든 것)으로 나눌 때 컴파일러는 일반적으로 나눗셈을 최적화합니다.

+1

"리터럴 같은 사람"은 2의 제곱수를 의미합니다. – UncleO

+1

컴파일러는 3, 5 및 기타 작은 숫자로 나눗셈을 최적화 할 수도 있습니다. 부동 소수점 모드가 완화되면 FP 분할은 역수로 곱셈으로 대체됩니다. – Mysticial

0

어느 정도 곱셈은 병렬로 수행 할 수 있습니다. 곱셈을 사용할 수도 있습니다.

관련 문제