부동 소수점
컴퓨터를 실수에서 표시하는 방법으로,
소수점을 위치를 고정시키지 않으며 가수와 지수를 사용하여 실수를 표현한다.
가수는 유효 숫자를 나타내며 지수는 소수점의 위치를 나타낸다.
부동 소수점은 (가수) * (밑수) 와 같이 곱셈 형태로 표현하며,
밑수는 일반적으로 2, 10, 16 을 사용한다.
실제 컴퓨터에서는 2진수를 사용하여
부호비트 (1비트) , 지수부, 가수부로 나타낸다.
소수점의 위치가 지수부의 크기에 따라 변경되며 소수점은 지수부와 가수부 사이에 있는 것으로 간주한다.
가수의 첫째 자리를 밑수보다 작은 한 자리 자연수가 되도록 바꾸는 것을 정규화라고 하며,
예를들어
고정 소수점 0.1 을 밑수가 10인 부동 소수점으로 표현하면
0.01 X 10 ¹ 이 된다.
정규화하면 1 X 10 -¹ 이다.
고정 소수점 0.4 를 밑수가 2인 부동 소수점으로 표현하면
0.8 X 2 -¹ 이고
정규화하면 1.6 X 2-² 이다.
부동 소수점은 기존의 고정 소수점 방식보다 아주 크거나 작은 수를 나타낼 수 있어, 과학 분야로 응용되어 사용된다.
또한 메모리의 효율성이 높으며 음수의 표현이 간단하지만,
하드웨어의 비용이 증가하고 고정 소수점 방식에 비해 연산 속도가 느리며 유효숫자의 가수의 자릿수가 정해져 있다.
참고 유튜브 정리 ...
컴퓨터에서 숫자는 특별한 소프트웨어적 처리가 존재하지 않다면 이진법에 기반한 방법으로 저장이 된다.
또한 이는 floating point = 부동 소수점 이라고 이야기 한다.
여기서 말하는 부동은 떠다니는 이라는 뜻의 한자어 입니다.
우리가 컴퓨터의 이진 소수점을 보기 전에 우리가 쓰고 있는 십진 소수점 수를 한번 생각해보겠습니다
우리가 일반적으로 소수점 수를 인식하는 개념은 Decimal 즉 십진 소수점수 이다.
Decimal 은 우리수나 실수의 개념이 아니며,
우리가 숫자를 표현하는 방법이다.
우리는 수를 실제로 인식하기는 어렵다.
왜냐면 10을 기준으로 출발한 개념인 Decimal 을 사용하고 있기 때문이다.
우리는 익숙해져서 잘 느끼지 못하고 있지만
십진소수점수의 아래 숫자들은 모든것을 10으로 나눈 개념이다.
0.1을 열개 가져다 놓으면 소수부가 0 이되고 자리 올림하여 10 이 된다.
우리는 소수점 이하의 부분도 십진법으로 계산하고 있다.
다른 관점으로 보면 0.1 은 1/10 로써 어떤 대상을 10개로 나눈 것 중 하나라는 뜻이다.
반대로 컴퓨터에서 숫자를 표현하는 개념은 Binary 이진 소수점이다.
2를 기준으로 설명하게 된다.
정확히는 이진법 10을 기준으로 생각하게 된다.
이는 정확히 이진법 0.1 을 두개를 가져다 놓은면 1이 되는 것이다.
십진법과 이진법 이것은 숫자라는 추상적인 개념을 우리가 인지할 수 있도록 표현하는 방법이라고 할 수 있다.
우리는 숫자를 셀 수 있지만 사실 숫자라는 것은 굉장히 추상적인 개념이다.
숫자라는 것은 실존하는 것이 아닙니다.
여기서 우리는 십진 소수점 수의 개념을 생각해보자.
먼저 십진소수점수 중 유한 소수점수를 생각해본다.
0.2는 0~1 사이를 10으로 나눈 것 중 2개이다.
따라서 분수로 표현하면 2/10가 되고,
이것을 보기 좋게 공약수로 나누면 1/1이 된다.
0.45 는 0~1 사이를 10의 제곱 즉 100으로 나눈 것 중에 45개라는 뜻이다.
분수로 표현하면 45/100 이 되고.
이것을 역시 보기좋게 공약수로 나누어 9/20 으로 표현 할 수 있다.
여기서 알 수 있는 일반적인 사실을 하나 말해보겠다.
십진유한소수점수는 모두 10으로 쪼개나가다보면 어느 순간 정확히 떨어지게 나뉘어지는 지점이 존재한다는 것.
역으로 이야기하면 약분된 분수의 분모에 적당한 자연수 값을 곱하면 10의 거듭제곱이 된다는 뜻이다.
자 이번엔 십진 무한 소수점 수(유리수) 를 생각해보자
십진 무한소수점수는 모두 10의 거듭제곱으로 나눠서 완벽하게 갈라지지 않는다.
예를 들면 1/3이 그렇다.
이 1/3 이라는 숫자는 10 으로 0~1 사이를 몇번을 거듭해서 나누어도 완벽하게 갈라지지 않는다.
따라서 1/3 은 십진소수점수로 표현하자면 십진무한소수점수가 된다.
또한 이 1/3 은 분모에 어떤 정수를 곱해도 10의 거듭제곱을로 표현 할 수가 없다.
'TEAM STUDY > 한 권으로 읽는 컴퓨터 구조와 프로그래밍' 카테고리의 다른 글
이제는 '컴파일과 인터프리터' 모르면 안됨 🔊 (3) | 2021.12.30 |
---|---|
Hash Table ( 해시 테이블) 에 대해 알아보기 😤 (0) | 2021.12.29 |
Java Map 헷갈리는 부분 다시 정리. 😅 (0) | 2021.12.27 |
인스턴스 / 프로세스 / 쓰레드 ??? 🙄 (0) | 2021.12.23 |
바쁜 직장인들이 삼색볼펜 스터디 시작하며 (0) | 2021.12.03 |