32 비트 머신에서 float 형의 변수는 4 바이트의 메모리 공간을 차지한다. 즉, int와 같은 크기의 메모리가 할당된다. 그리고 4 바이트의 최상위 비트가 1로 세팅이 되면 이 float형의 변수는 음수를 의미한다. 따라서 float 형의 변수의 절댓값을 구하고 싶으면 메모리에 접근해서 4 바이트를 얻어 온 다음 최상위 비트만 0으로 만들고 나머지는 그대로 두면 된다. 비트 마스크를 이용해서 이 과정을 수행하고 싶으면 비트 마스크를

01111111 11111111 11111111 11111111 = 2^31 - 1 = 0x7F FF FF FF

처럼 잡아서 and 연산을 수행하면 된다:

float fast_abs(float fx) {
    int ix = *(int *)&fx ;    // 4 바이트 비트 데이터 정수로 변환;
    ix &= 0x7FFFFFFF;         // MSB 지우기
    return *(float *)&ix ;    // float 형으로 되돌려 줌;
}
728x90

'Image Recognition > Fundamental' 카테고리의 다른 글

삼각형의 외접원: 외접원의 반지름  (0) 2012.10.13
Ellipse Parameters  (0) 2012.10.13
x 보다 크거나 같은 가장 작은 2^n ?  (0) 2012.02.13
Is Pow of 2  (0) 2012.02.13
Fixed-point RGB2Gray  (0) 2012.01.25
Posted by helloktk
,