카테고리 없음

공부 4일차

jjon-jonny 2023. 9. 3. 13:46

백준 

 

1-5

scanf("%d%d") 이렇게 붙이지 말고 띄어쓸것.

int 같은 경우 4byte가 일반적이라 소수를 나타낼때 부동소수점오차 가 일어날수 있다.

 

ex) 1/3 은 0.33333... 이다, 

무한하기 때문에 애당초 유한한 비트로 이를  표현할 수 없음.

 

참고) 소수점의 2진수 변환또한 간단.

0.25 는 1/4이니까 0.01이런식으로 표현하면됨. 

반대로 이진수에서 10진수로 변환은 0*2^0+0*2^-1+1*2^-2 로 바꾸면 됨.

 

ieee 754 방식을 사용한다라...

그렇다면 왜 bias 의 값이 127이고 1000~ 의 값과 다른 bias의 값을 갖는 것일까?
일단 먼저 

구조를 나눠 보면 

부호(1)/지수(8)/가수(23)

이렇게 총 32비트로 4byte 이다.


# 잠만 말이 안되는게 double은 뭐지 그럼?? 이것도 ieee754 방식을 따른다고?

부호는 + 아니면 -이니까 그렇다고 쳐도,

지수가 127인 이유가 뭘까 일단 128이 되면 2의 7승이 128이다. 이때부터 8자리 수가 된다.

그렇다면 문제는 256에서는 그 수가 초과하기 때문에 그 윗수는 받아드릴 수 없다는 문제에
직면하게 된다는 것인데.... 

일단 가장먼저 지수가 0이면 127이 되어 애당초 성립이 안되게 된다. 이문제는 없을까
0.25이 있다고 해보자 0.01으로 만들고 버린다 이후 1.0 * 2^-2 으로 바꾼다.
그러면 지수부분은 127-2가 되는데... 그러면 8비트를 못쓰게 된다.

127+