실수형에서 정수형 형변환 성능 높이기 DarkKaiser, 2007년 6월 12일2023년 9월 4일 일반적으로 실수형에서 정수형으로 형변환을 하는 경우가 종종 있다. 이때 보통 묵시적으로 컴파일러가 알아서 해 줄수 있지만 이렇게 할 경우에 속도가 상당히 느리다. 한두번은 빠르게 느껴져도 이게 백만번, 천만번일 경우 형변환 부분에서 전체 함수의 90%까지 잡아먹을 수도 있다. 이럴경우 아래의 코드를 이용하여 성능을 30% 정도 끌어올릴 수 있다. 이때, 주의할 점은 아래의 함수를 이용한 경우 실수형은 반올림을 행한다는 것이다. 이 점을 주의하자~ 우선 아래의 매크로를 선언한다. #ifdef __BIGENDIAN__ # define FTOI_LONG reserved, l #else # define FTOI_LONG l #endif #define USE_FTOI union{ double r; struct { long FTOI_LONG; } l; } __ftoitmp; #define OP_FTOI(val) (((__ftoitmp.r=(val)+((((65536.*65536.*16.)+(65536.*.5))*65536.)) ), __ftoitmp.l.l-0x80000000L)) 위의 매크로를 선언하고 나서, 형변환을 하려는 함수의 처음에 아래의 코드를 집어넣는다. register USE_FTOI 그리고 실제 형변환은 아래와 같이 한다. 아래 코드의 경우 반올림을 버리기 위해서 일부러 0.5를 빼고있는것을 볼 수 있다. i_orgc = OP_FTOI(r_orgc - .5f); C/C++/VC++ C++VC성능형변환