문제
친구와 나는 오늘 점심 시간에 Inf 's와 Nan's가 어떻게 저장되는지 토론하고있었습니다.
예를 들어 Fortran 90을 가져 가십시오. 4 바이트 레알은 INF 또는 NAN의 값을 얻을 수 있습니다. 이것은 내부적으로 어떻게 저장됩니까? 아마도 4 바이트 레알은 내부적으로 32 자리 이진 번호로 표시되는 숫자입니다. INF와 NAN은 33 비트 이진 숫자로 저장됩니까?
해결책
특히 페스토에서 링크:
IEEE 단일 정밀 플로팅 포인트 표준 표준 표준 표준에는 32 비트 단어가 필요하며,이 단어는 0에서 31까지 왼쪽에서 오른쪽으로 표시 될 수 있습니다. 첫 번째 비트는 부호 비트입니다. S
, 다음 8 비트는 지수 비트입니다. 'E
', 마지막 23 비트는 분수입니다.'F
':
S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF 0 1 8 9 31
가치 V
단어로 표시되는 것은 다음과 같이 결정될 수 있습니다.
- 만약에
E=255
그리고F
그렇다면 0이 아닙니다V=NaN
( "숫자가 아님") - 만약에
E=255
그리고F
0이고S
~이다1
, 그 다음에V=-Infinity
- 만약에
E=255
그리고F
0이고S
~이다0
, 그 다음에V=Infinity
- 만약에
0<E<255
그 다음에V=(-1)**S * 2 ** (E-127) * (1.F)
어디 "1.F
"F는 F를 암시적인 선행 1 및 이진 지점으로 접두사로 만들어 생성 된 이진수를 나타 내기위한 것입니다. - 만약에
E=0
그리고F
그렇다면 0이 아닙니다V=(-1)**S * 2 ** (-126) * (0.F)
이것들은 "정상화되지 않은"값입니다. - 만약에
E=0
그리고F
0이고S
~이다1
, 그 다음에V=-0
- 만약에
E=0
그리고F
0이고S
~이다0
, 그 다음에V=0
다른 팁
대부분의 부동 소수점 표현은 IEEE 표준을 기반으로합니다. 패턴을 설정합니다 INF 및 NAN에 대해 정의되었습니다.
제휴하지 않습니다 StackOverflow