float의 유효 자리수에 대해 이해하기 위해서는 우선 소수점을 2진수로 바꾸는 법을 알아야 한다
15.625 를 예로 들어보면
15 -> 1111
여기까지는 쉽다
이후 소수점은 곱하기 2를 해서 1의 자리수를 bit로(지수) 표현하면 된다
0.625 -> 1.25 -> .1
0.25 -> 0.5 ->.10
0.5 -> 1.0 -> 0.101
즉 15.625를 2진수로 나타내면 1111.101이 된다
0.625를 2진수로 나타낸다면 0.101이 된다
https://whatisthenext.tistory.com/146
이 포스팅을 참고해서 C에서 float을 어떻게 표현하는지 공부를 하고왔으면
https://www.h-schmidt.net/FloatConverter/IEEE754.html
여기서 실습을 해보면 쉽게 이해가 더 쉽다
exponent의 뒤 7bit와 mantissa의 마지막 비트를 체크해보면
mantissa가 1.0000001192...로 표시가 되는 것을 볼 수 있다.
(exponent를 127로 했다는 것은 bit shift가 없었다는 뜻이고
bit shift가 없었다는 것은 1의 자리 이상은 신경쓰지 않겠다는 의미
original 숫자 == mantissa, 부동소수점에서 exponent는 bias일 뿐 유효값은 mantissa이다)
이제 체크를 해지하고 두번째 끝 비트를 체크해보면 소수점 이하가 2배가 된다!
C에서 소수점 이하는 mantissa의 최소값의 배수의 형태로 표현이 되며
그말은 즉!
소수점 이후 유효숫자는 1192가 시작되는 바로 앞 지점인 6자리 수 라고 할 수 있다.
'Study > 프로그래밍' 카테고리의 다른 글
github 에 PR메세지 포맷 설정하기 (0) | 2021.03.17 |
---|---|
CircleCi에서 Slack으로 알림 보내기 (0) | 2021.02.22 |
Docker Build 시 apt 저장소 바꾸기 (1) | 2020.07.29 |
wav to pcm / pcm to wav / flac to wav 리눅스에서 쉽게 변환하기 (0) | 2020.02.21 |
vi 여러 줄 띄어쓰기 (0) | 2020.02.11 |
댓글