개발/CS

부동소수점이란

하프킴 2021. 5. 8. 21:51
728x90
  • 고정 소수점
    • 특정 위치에 소수점을 고정하고 정수부와 소수부를 나눠 표현하는 방식
    • 간편하고 계산이 빠르지만, 표현할 수 있는 범위가 굉장히 제한적임.
  • 부동 소수점 
    • IEEE에서 표준으로 제한한 방식
    • 부동(不動) 소수점이 아니라 부동(浮動) 소수점이다. 영어 "floating = 떠 있는" 을 해석한 것
    • 표현할 수 있는 범위가 넓지만 연산속도가 다소 느리다.
    • 부동 소수점의 표현 방식은 "(가수) X(밑수)(지수)" 형태로 표현한다.
    • ex) 12.3 -> 123 x 10-1 
    • IEEE754에 정의된 것들
      • 비트구조
        • 부호비트 sign bit (1비트) : 0이면 양수, 1이면 음수
        • 지수비트 exponent (8비트) :  10000111 127 + 8 = 135, 2 ^ (k - bias) 에서 k값을 나타냄.
        • 가수비트 fraction (23비트) : 1.xyz의 형태로 표현한 가수. 왼쪽 부분부터 차례대로 채움
      • 32비트 기준 : +-(1.가수부) * 2 ^ (지수부 - 127)
      • 7.625 -> 111.101 -> 1.11101 * 2^2
      • 지수부 127 + 2 -> 129가 들어감
      • 가수부 111101 0000.....(23비트)가 들어감
    • 부동소수점 방식의 오차
    • 2진수로 표현하기 때문에 오차가 존재하고, 담을 수 있는 최대값 이상을 담을 수 없다.

말 그대로 소수점이 고정되어있지 않고 떠다니는 방식

 

    • 정확한 숫자계산을 위한 클래스
    • java.math에 속하며 정확한 계산이 필요한 화폐단위를 다루는 프로그램에서 사용됨.
    • 내부적으로 배열을 사용해서 수치데이터를 분리해서 저장하므로, 수치 데이터 자릿수에 제한이 없다.
    • 생성자에 문자열 형태의 수치 데이터를 전달하여 데이터를 생성하는 것을 확인할 수 있다.BigDecimal은 왜 정확한가?
    • 자바에서는 실수를 정확하게 표현하려는 시도중 하나 BigDecimal -> 각 자리수를 실수로 관리.
      • Primitive 타입 대신에 Refrence 타입을 통해 각 자리수를 정확하게 저장할 수 있도록 함.
      •  
  • BigInteger 클래스
    •