inline void real2uexp( const f32& r )
{
*(i32*)&r ^= *(i32*)&r >> msb< i32 >() | msb_value< i32 >();
}
inline void uexp2real( const f32& r )
{
*(i32*)&r ^= ~( *(i32*)&r >> msb< i32 >() ) | msb_value< i32 >();
}
inline void real2uexp( const f64& r )
{
const i32u c = *( (i32*)&r + 1 ) >> msb< i32 >();
*(i32u*)&r ^= c;
*( (i32u*)&r + 1 ) ^= c | msb_value< i32 >();
}
inline void uexp2real( const f64& r )
{
const i32u c = ~( *( (i32*)&r + 1 ) >> msb< i32 >() );
*(i32u*)&r ^= c;
*( (i32u*)&r + 1 ) ^= c | msb_value< i32 >();
}
부동소수를 unsigned int 레벨로 비교가능하게 재배치한다~ ( 그리고 복원 )
템플릿 초짜일때 짠거라 이모양 ㅡㅡㅋㅋ
열심히 만들고있었는데 이미 있구나
이정도는 술술 풀어야~
옛날엔 부동소수 트릭 한 30가지는 알아야 게임 엔진 프로그래머였지.
32비트 컴파일러 기준으로 만들어서 64비트에선 double 성능이 좀 별로일려나.