[JAVA] 변수의 타입(3) [실수형 타입 float, double, 부동소수점수]

2022. 1. 10. 11:25·◎ Java/Java☕
728x90


1. 실수형 - float, double

실수형은 float와 double이 있으며, 각 타입의 변수에 저장할 수 있는 값의 범위는 아래와 같다.

 

자료형 저장 가능한 값의 범위 크기
bit byte
float 1.4E-45 ~ 3.4E38 (1.4×10^-45 ~ 3.4×10^38) 32 4
double 4.9E-324 ~ 1.8E308 (4.9×10^-324 ~ 1.8×10^308) 64 8

* float와 double은 양의 범위만 적은 것이며, 음의 범위는 양의 범위에 음수 부호(-)를 붙이면 된다.

 

float 타입을 기준으로 봤을 때, 표현 범위는 '-3.4 × 10^38 ~ 3.4 × 10^38'이지만, '-1.4 × 10^-45 ~ 1.4 × 10^-45' 범위(0은 제외)의 값은 표현할 수 없다.

 

실수형은 소수점 수도 표현해야 하므로 '얼마나 큰 값을 표현할 수 있는가' 뿐만 아니라 '얼마나 0에 가깝게 표현할 수 있는가'도 중요하다.

 

Q. 실수형도 정수형처럼 저장할 수 있는 범위를 넘게 되면 오버플로우가 발생하나요?
실수형에서도 변수의 값이 표현 범위의 최댓값을 벗어나면 '오버플로우'가 발생하는데, 정수형과 달리 실수형에서는 오버플로우가 발생하면 변수의 값은 '무한대(infinity)'가 된다.

그리고 정수형에는 없는 '언더플로우(underflow)'가 있는데, '언더플로우'는 실수형에서 표현할 수 없는 아주 작은 값, 양의 최솟값보다 작은 값이 되는 경우를 말한다. 이때 변수의 값은 0이 된다.

2. 실수형의 저장 방식

실수형은 정수형과 표현 형식이 달라서, 실수형은 값을 부동소수점수(floating-point)의 형태로 저장한다.

 

부동소수점수는 실수를 '±M×2^E'와 같은 형태로 표현하는 것을 말하며, 부호(Sign), 지수(Exponent), 가수(Mantissa)로 이루어져 있다.

 

기호 의미 설명
S 부호(Sign bit) 0이면 양수, 1이면 음수
E 지수(Exponent) 부호있는 정수. 지수의 범위는
-127 ~ 128(float), -1023 ~ 1024(double)
M 가수(Mantissa) 실제값을 저장하는 부분.
10진수로 7자리(float), 15자리(double)의 정밀도로 저장 가능
float : 1+8+23=32 (4byte)
S(1) E(8) M(23)  
double : 1+11+52=64 (8byte)
S(1) E(11) M(52)

- 정규화하는 방법
  1. 변환하고자 하는 숫자에 절댓값 붙이고 2진수로 변환
      : 6.25 [10] → 110.01 [2]
  2. 1.xxxx 형식으로 바꾸기(=1.M × 2^E)
      : 110.01 [2] = 1.1001 × 2^2
  3. E에 기저수를 더한 뒤, 2진법으로 변환 [float 기저수 127, double 기저수 1023]
      : (float 기준) 129 [10] → 10000001 [2]
  4. 부호 'S' + 2진법으로 변환된 지수 'E'+가수 'M'
      : (S)0 (E)10000001 (M)10010000000000000000000

 

참고문헌 : 남궁성(2016), Java의 정석, 도우출판

728x90
'◎ Java/Java☕' 카테고리의 다른 글
  • [JAVA] 정수형과 실수형 간의 형 변환 [정수형을 실수형으로, 자동 형변환]
  • [JAVA] 정수형 간의 형 변환 [형 변환의 정의(casting), 값 손실(loss of data)]
  • [JAVA] 변수의 타입(2) [정수형 타입 byte, short, int, long, 오버플로우]
  • [JAVA] 변수의 타입(1) [논리형 타입 boolean, 문자형 타입 char]
예르미(yermi)
예르미(yermi)
끊임없이 제 자신을 계발하는 개발자입니다👨🏻‍💻
  • 예르미(yermi)
    예르미의 코딩노트
    예르미(yermi)
  • 전체
    오늘
    어제
    • 분류 전체보기 (937)
      • ◎ Java (133)
        • Java☕ (93)
        • JSP📋 (26)
        • Applet🧳 (6)
        • Interview👨🏻‍🏫 (8)
      • ◎ JavaScript (48)
        • JavaScript🦎 (25)
        • jQuery🌊 (8)
        • React🌐 (2)
        • Vue.js🔰 (6)
        • Node.js🫒 (3)
        • Google App Script🐑 (4)
      • ◎ HTML5+CSS3 (17)
        • HTML5📝 (8)
        • CSS3🎨 (9)
      • ──────────── (0)
      • ▣ Framework (67)
        • Spring🍃 (36)
        • Spring Boot🍀 (12)
        • Bootstrap💜 (3)
        • Selenium🌕 (6)
        • MyBatis🐣 (10)
      • ▣ Tools (47)
        • API🎯 (18)
        • Library🎲 (15)
        • JitPack🚀 (3)
        • Jenkins👨🏻 (7)
        • Thymeleaf🌿 (4)
      • ▣ Server (32)
        • Apache Tomcat🐱 (14)
        • Apache HTTP Server🛡️ (1)
        • Nginx🧶 (7)
        • OracleXE💿 (4)
        • VisualSVN📡 (4)
      • ▣ OS : 운영체제 (18)
        • cmd : 명령프롬프트💻 (10)
        • Linux🐧 (8)
      • ▣ SQL : Database (56)
        • Oracle SQL🏮 (26)
        • PL SQL💾 (9)
        • MySQL🐬 (6)
        • MariaDB🦦 (6)
        • H2 Database🔠 (3)
        • SQL 실전문제🐌 (6)
      • ────────── (0)
      • ◈ Human Project (86)
        • Mini : Library Service📚 (15)
        • 화면 설계 [HTML]🐯 (10)
        • 서버 프로그램 구현🦁 (15)
        • Team : 여수어때🛫 (19)
        • Custom : Student🏫 (9)
        • Custom : Board📖 (18)
      • ◈ Yermi Project (40)
        • 조사모아(Josa-moa)📬 (5)
        • Riddle-Game🧩 (6)
        • 맛있을 지도🍚 (2)
        • 어디 가! 박대리!🙋🏻‍♂️ (5)
        • 조크베어🐻‍❄️ (4)
        • Looks Like Thirty🦉 (2)
        • Toy Project💎 (12)
        • 오픈소스 파헤치기🪐 (4)
      • ◈ Refactoring (15)
        • Mini : Library Service📚 (8)
        • 서버 프로그램 구현🦁 (1)
        • Team : 여수어때🛫 (0)
        • 쿼리 튜닝일지🔧 (6)
      • ◈ Coding Test (89)
        • 백준(BOJ)👨🏻‍💻 (70)
        • 프로그래머스😎 (2)
        • 코드트리🌳 (7)
        • 알고리즘(Algorithm)🎡 (10)
      • ◈ Study (102)
        • 기초튼튼 개발지식🥔 (25)
        • HTTP 웹 지식💡 (4)
        • 클린코드(Clean Code)🩺 (1)
        • 디자인패턴(GoF)🥞 (12)
        • 다이어그램(Diagram)📈 (4)
        • 파이썬(Python)🐍 (16)
        • 에러노트(Error Note)🧱 (34)
        • 웹 보안(Web Security)🔐 (6)
      • ◈ 공부모임 (39)
        • 혼공학습단⏰ (18)
        • 코드트리 챌린지👊🏻 (2)
        • 개발도서 100독👟 (8)
        • 나는 리뷰어다🌾 (11)
      • ◈ 자격증 공부 (37)
        • 정보처리기사🔱 (16)
        • 정보처리산업기사🔅 (9)
        • 컴퓨터활용능력 1급📼 (12)
      • ─────────── (0)
      • ◐ 기타 (113)
        • 알아두면 좋은 팁(tip)✨ (46)
        • 개발자의 일상🎈 (44)
        • 개발도서 서평🔍 (10)
        • 개발관련 세미나🎤 (2)
        • 블로그 꾸미기🎀 (9)
        • 사도신경 프로젝트🎚️ (2)
  • 인기 글

  • 최근 댓글

  • 태그

    꿀팁
    코딩 테스트
    자바스크립트
    Project
    백준 티어
    일상
    Java
    SQL
    jsp
    html
    Oracle
    프로그래밍
    CSS
    코딩
    javascript
    spring
    Error Note
    백준
    Database
    BOJ
  • 250x250
  • hELLO· Designed By정상우.v4.10.3
예르미(yermi)
[JAVA] 변수의 타입(3) [실수형 타입 float, double, 부동소수점수]
상단으로

티스토리툴바