Float.toIntBits vs Float.toRawIntBits


IEEE-754 와 관계된 부분을 공부하다가, 갑작스럽게, Float.toIntBits(float)Float.toRawIntBits(float)의 차이점이 궁금해졌다.

toIntBits

If the argument is NaN, the result is 0x7fc00000.

toRawIntBits

If the argument is NaN, the result is the integer representing the actual NaN value. Unlike the floatToIntBits method, floatToRawIntBits does not collapse all the bit patterns encoding a NaN to a single “canonical” NaN value.

Quiet NaN and Signalling NaN

NaN 도 두가지로 나뉜다. 아래 보이는 봐와 같이 fraction의 첫번째 비트가 0 이고 fraction 비트 전체가 0인 경우(POSITIVE_INFINITY) 가 아니면 SNaN 이고 fraction 의 첫번째 비트가 1 이면 QNaN 이라고 한다. (참고 IEEE Standard 754 Floating Point Numbers)

0 11111111 00000000000000000000000 Float.POSITIVE_INFINITY

0 11111111 00000000000000000000001 SNaN
0 11111111 0...................... SNaN
0 11111111 01111111111111111111111 SNaN

0 11111111 10000000000000000000000 QNaN Float.NaN 0x7fc00000
0 11111111 1XXXXXXXXXXXXXXXXXXXXXX QNaN

Doing is Knowing


보는 바와 같이 toIntBits 는 모든 NaN 값에 대해 0x7fc00000 으로 변환하고 toRawIntBits 는 비트 정보를 잃지 않고 처리한다.

-------------------------------------
       value: 3.140000
   toIntBits: 0x4048f5c3 3.140000
toRawIntBits: 0x4048f5c3 3.140000
-------------------------------------
       value: NaN
   toIntBits: 0x7fc00000 NaN
toRawIntBits: 0x7fc00000 NaN
-------------------------------------
       value: NaN
   toIntBits: 0x7fc00000 NaN
toRawIntBits: 0x7fa00000 NaN
-------------------------------------
       value: NaN
   toIntBits: 0x7fc00000 NaN
toRawIntBits: 0x7fe00000 NaN
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s