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

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

처럼 잡으면 된다.

float  fast_abs(float fx) {
    int  ix = *(int *)&fx ;   // 4바이트 얻어 오기;
    ix &= 0x7FFFFFFF;    // MSB 지우기
    return *(float *)&ix ;   // float 형으로 되돌려 줌;
}

 

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

삼각형의 외접원 : 외접원의 반지름  (0) 2012.10.13
Ellipse Parameters  (0) 2012.10.13
float 타입 변수의 절대값은?  (0) 2012.02.17
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