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 |