2011-03-17 4 views
0

.NET에서 연산 성능에 대해 this page을 읽고 있었는데 나누기 연산과 나머지 연산 간에는 큰 차이가있었습니다.범위 검사를위한 모듈러스 연산자의 효율성

그렇다면 모듈러 연산자는 느리지 만 동일한 목적으로 사용할 수있는 조건부 블록의 비용과 관련하여 얼마입니까?

양수가 y이며 20보다 클 수 없다고 가정 해 봅시다. .NET뿐만 아니라 일반적인 규칙으로 어느 것이 더 효율적입니까?

이 :

x = y % 10 

나이 :

x = y 
if (x >= 10) 
{ 
    x -= 10 
} 
+0

어떤 언어를 사용하고 있습니까? –

+2

두 번째 코드 스 니펫은 본질적으로 안전하지 않고 덜 명확합니다. 코드 사용이 바뀌고 y가 더 커질 수 있다면 어떻게해야할까요? 20. 더 걱정스러운 것은 올바른 코드 또는 마이크로 최적화입니까? –

+1

J2ME (1.4.2)를 사용하고 있습니다. Mitch : 예, 두 번째 코드 스 니펫이 실제로 좋지는 않지만 현재로서는 마이크로 최적화에 대한 전반적인 규칙이 있다면 걱정이됩니다. – Pin

답변

0

가 몇 번이 모듈로 연산을 호출을? 몇 초 동안 여러 번 호출되는 내부 루프가 빡빡한 경우 배열 오버플로를 방지하는 다른 방법을 찾아야합니다. 그것이 < (말하기)라고하는 경우 10,000 번, 나는 그것에 대해 걱정하지 않을 것입니다.

스 니펫 사이의 성능은 가능한 경우 실제 데이터를 사용하여 테스트합니다. 컴파일러/JITer와 CPU가 무엇을하는지 알지 못합니다. %&으로 최적화 될 수 있습니다. 두 번째 인수가 상수이고 2의 거듭 제곱 인 경우 CPU 수준에서 나머지 코드에 종속되는 분기 예측과 분기 예측의 차이에 대해 이야기하고 있습니다.

+0

그래, 나는 부서와 분기 misprediction 사이의 CPU 수준의 차이에 대해 우려했다. 두 번째 주장이 2의 거듭 제곱이 아니라면? 지금은 코드에서 문제가되지 않지만 일반적인 규칙이있는 경우 호기심을 묻는 질문 만했습니다. – Pin