-2일차- 첫수업, 재귀함수, 부동소수점
23년 이전 글/모두의연구소 아이펠

-2일차- 첫수업, 재귀함수, 부동소수점

2일차

부동소수점

오전은 아이펠 내에 있는 LMS를 통해 수강했다

파이썬의 가장 기본적인 내용들이 담겨 있어서 대부분의 내용은 넘어갔지만

문제는 부동소수점에 대한 내용이었다

간단하게 1.0을 고정소수점부동소수점으로 표현하는 것이었는데 제대로 이해가 되지않아

꽤 오랜시간이 걸렸다

그래서 한번 더 정리하고자 한다

우선 고정소수점과 부동소수점을 구분해서 쓰는 목적에 대해서 이해하자

고정소수점은 말그대로 소수점이 움직이지 않는다

그래서 소수점 단위의 계산이 필요없는 정수를 표현할 때 주로 사용된다

부동소수점은 웃기게도 움직이지 않는 소수점같은 어감을 가지고 있지만

움직인다는 의미의 소수점이다.

따라서 이 소수점은 움직이는 것을 염두하므로, 실수를 표현할 때 주로 사용된다

여기에서 부동소수점 방식으로 숫자를 표현하는 방법에 대해서 이해하기 좋았던 게시물을

링크하고 간단하게 정리하고자 한다

https://m.blog.naver.com/08482/221518500138

 

부동소수점 제일 쉽게 이해하기

정처기 공부할 때 부동소수점 이해하기가 힘들었는데 아래 글 덕분에 한 번에 이해할 수 있었다 작성자님 ...

blog.naver.com

부동소수점 표현방법

다음은 32비트에서 부호비트, 지수비트, 가수비트로 나누어져 있다

링크에 예시처럼 이진법으로 바꿔보면

예시 숫자 = 69.6875

정수 = 69

소수 = 0.6875

로 분리한 후

정수부터 이진법으로

#bin 함수는 정수를 이진법으로 변환함
bin(69)
#result: '0b1000101'
#0b는 단순 2진수 표현임 따라서 1000101이 이진수

 

소수를 이진법으로

bin_list = []
def float_to_bin(float_n):
    if float_n == 0.0:
        return bin_list
    float_n = float_n * 2
    if float_n < 1:
        bin_list.append(0)
        
    elif float_n >= 1:
        bin_list.append(1)
        float_n = float_n - 1
    return float_to_bin(float_n)
    
float_to_bin(0.625)
#[1,0,1]

해당함수는 오늘 배운 재귀함수를 같이 써먹어보고자 직접 만들어보았다

합치면

69.6875 == (1000101.1011)

 1000101.1011 에서 1.xx 형태가 될때까지 소수점을 이동하면

1.0001011011 * 2^6

여기서 2의 지수 부분이 지수부에, 나머지 소수점은 소수점이하 가수부에,

지수 부분은 2진수로 바꾸기전 127을 더해야함

(이는 IEEE에서 표준으로 정한 bias(바이어스)로, 특별히 문제에 바이어스 값이 주어지지

않는 다면 127을 더해야함)

이에 133을 이진법으로 변환하면

bin(133)
#'0b10000101'

133 = (10000101)

0(부호) 10000101(지수부) 00010110110000000000000(가수부)

로 표현할 수 있다

 

까먹지말자 부동소수점!

안그러면 무한 재귀다!

 

반응형