실수형의 저장 형식과 부동 소수점의 오차

2021. 1. 1. 12:09·자바/기본적인 개념

1. 실수형의 저장 형식

- S는 부호 비트이며, 0이면 양수 1이면 음수를 나타낸다. 또한 양의 실수에서 음의 실수로 변환할 때, 정수형과 달리

'2의 보수법'을 사용하지 않고 그저 부호비트만 바꿔주면 된다.

 

- E는 지수이며, float는 -127 ~ 128, double은 -1023 ~ 1024의 범위를 가진다.

(그러나, 실제로는 숫자 아님(NAN)과 양의 무한대와 음의 무한대를 표현하기 위해 예약되어 있으므로

float는 -126 ~ 127까지의 값을 표현할 수 있다.)

 

- M은 가수이며, 실제 값을 저장하는 부분이다. 또한 float와 double은 각각 정밀도가 다르므로 유의한다.

 

* S와 E, M을 합쳐서 부동소수점의 형태로 저장한다. 그러므로, 값의 범위는

(+-)Mx2^E로 저장이 된다.

 

 

2. 부동 소수점의 오차

- 컴퓨터는 10진수의 값이 아닌 2진수로 저장하기 때문에 10진수로는 유한소수이더라도, 2진수로 변환하면,

무한소수가 되는 경우가 있다. 그래서 이때, 정규화 작업을 한다.

 

 

- 정규화 작업은 2진수로 변환된 실수를 저장할 때 '1.xxx X 2^n'의 형태를 만드는 것을 말한다.

 

 

- 예시) 10진수를 2진수로 바꾸고 정규화를 통해 float 형식으로 변환하기.

(여기서 주의할 점은 실수형의 정밀도의 제한으로 인한 오차가 발생할 수 있다는 것이다.)

(예를 들어, int의 최대값은 약 20억으로 최대 10자리의 정밀도를 요구한다. 그러나 float는 10진수로

약 7자리의 정밀도만 제공하므로, int를 float로 변환할 때 정밀도 차이에 의한 오차가 있음을 알자.)

(f1과 f2의 값이 같음에도 불구하고 다른 결과 값이 나오는 이유는 다음장 '형변환'에서 다룰 것이다.)

(Float.floatToIntBits의 함수는 윗 그림에서 정규화에서 4칸씩 쪼개어 16진수로 표현하는 기능이다.)

수정

 

 

- 예시) float 값을 2진수로 바꾸고 10진수의 값으로 변환하기.

(여기서는 반올림이 발생하지 않는 것을 기억하자.)

 

'자바 > 기본적인 개념' 카테고리의 다른 글

자동 형변환  (0) 2021.01.01
형변환  (0) 2021.01.01
비트(bit)와 바이트(byte) 그리고 워드(word)  (0) 2020.12.31
형식화된 출력 - prinf()  (0) 2020.12.30
타입의 불일치와 문자와 문자열의 리터럴  (0) 2020.12.30
'자바/기본적인 개념' 카테고리의 다른 글
  • 자동 형변환
  • 형변환
  • 비트(bit)와 바이트(byte) 그리고 워드(word)
  • 형식화된 출력 - prinf()
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      안정 정렬
      TCP 소켓 프로그래밍
      자바 개념
      알고스팟
      불안정 정렬
      람다식
      Collections Framework
      소켓 프로그래밍
      제자리 정렬
      코딩테스트
      중간연산
      java.lang패키지
      문자 기반 스트림
      serializable
      outputstream
      java.time 패키지
      안드로이드 스튜디오
      ServerSocket
      유용한 클래스
      다형성
      Arrays
      InputStream
      file
      역직렬화
      코딩트리조별과제
      snail
      코드트리
      map()
      스트림
      선택 정렬
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    실수형의 저장 형식과 부동 소수점의 오차
    상단으로

    티스토리툴바