sqrt 나 log 를 카멕's hack 이나 테일러급수로 최적화하는것 따윈 내장 명령어 앞에 허무하게 무너졌고

비트 연산자를 이용한 곱셈 나눗셈 최적화도 펜티엄 이후 무의미.

임베디드엔 가끔 쓸모 있는 경우도 있겠지만.


그래도 아직까지 꽤 유용한 기법은 부동소수점 트릭이다.


float a, b, c;

a = some_value;

b = some_value;

c = fabs(a - b);


이런 경우.


혹자는 이렇게 한다.

c = a - b;

if (c < 0) c = -c;

(함수 호출을 줄였다)


혹자는 이렇게도 한다.

c = a - b;

if (a < b) c = b - a;

(계산 결과가 c 에 반영되는걸 기다리지 않게 파이프라인 최적화)


그래도 약해.


c = a - b;

*(int*)&c &= 0x7FFFFFFF;


이게 정답.


속도는 2배 이상이라고 봐도 됨.


위의 코드들과는 좀 별도로

if (a - b < 0 && c - d < 0) e++;


이런 경우도


ab = a - b;

cd = c - d;

e += (*(unsigned int*)&ab >> 31) & (*(unsigned int*)&cd >> 31);


로 처리하면 처리 속도 급상승.

SIMD 랑 같이 쓰기는 별롤것 같아.

(예문을 작성하고 보니 딱 적절한 예는 아니넹. 뭐 이런 방법도 있다공. bitwise operator 죄다 활용할 수 있음)