[CS] Single Precision / Double Precision

Bik_Kyun·2022년 3월 31일
0
post-thumbnail

쇼핑몰의 DB 모델을 만들때 price에 무슨 자료형을 써야 할까 고민하다가 정리해본다.

1. Single Precision(단정도)

부호(sign)

  • 양수와 음수를 판별하는 비트.
  • MSB(Most Significant Bit)
  • 양수는 0, 음수는 1.

지수(exponent)

  • 수의 정밀도를 결정하는 부분.
  • 2^e 에서 e를 표현하는 것.
  • 바이어스지수(부동소숫점)

    실수끼리 연산할 때 크기가 더 작은 실수의 가수와 지수를 조정해야한다.
    따라서 실제 지수값에 127(0111_111)을 더해 모두 양수로 만들어 준다.
    Bias는 조정값이기 때문에 IEEE754에서는 +127로 정해져 있다.
  • 단정도에서 지수부는 8비트이다.

가수(mantissa)

  • 실질적인 데이터를 의미하는 부분.
  • 표현 가능한 수의 범위를 결정하는 부분.
  • 정규화(normalized mantissa)
  1. 가수를 1.bbb...b형식으로 표현할 수 있도록 지수를 조정한다.
  2. 가수를 표현할 때 bbb...b만 표현한다.
  3. 1은 항상 존재하기 때문에 저장할 필요가 없기 때문.
  4. 단, 숫자 0인 경우에는 사수를 모두 0으로 채운다.
  • 단정도에서 가수부는 23비트로 구성된다.

부호+지수+가수 의 총 비트수는 32비트(4바이트)이다.

2. Double Precision(배정도)

부호(sign)

  • 단정도와 같다

지수(exponent)

  • 배정도에서 지수부는 11비트이다.

가수(mantissa)

  • 배정도에서 가수부는 52비트이다.

부호+지수+가수 의 총 비트수는 64비트(8바이트)이다.

3. So, float vs double?

데이터 및 파일 크기, 해석속도, 파일 생성 속도에 있어서 단정도가 유리하다.
정밀도에 있어서 배정도가 유리하다.

사람은 sqrt(2)나 π을 그냥 그대로 받아들일 수 있지만 컴퓨터는 숫자를 무조건 2진수로밖에 기록할 수 없다. 그래서 정수와 유리수는 정확하게 저장할 수 있지만 무리수의 경우 소수점 몇째짜리쯤에서 끊어서 거기까지밖에는 저장할 수 없다. 이렇게 잘려나간 뒷쪽 소수점 때문에 필연적으로 발생하는 오류를 truncation error 트렁케이션 에러(잘라내면서 생기는 오류) 혹은 round off error 라운드 오프 에러(반올림 하면서 생기는 오류) 라고 부른다.

즉, 컴퓨터로 실수를 동반한 계산을 하면 exact solution은 절대로 구할 수 없다. 아무리 정확하게 계산을 하더라도 truncation error 때문에 무조건 어느정도의 오차가 있는 해를 얻을 뿐이다.

그렇다면 결론은? 어떻게 하면 용인할 수 있는 수준으로 오차를 작게 할 수 있겠는가?

컴퓨터에서 실수를 나타내는 방법은 크게 두 가지가 있다. single precision 싱글 프리시젼과 double precision 더블 프리시젼이 바로 그것이다. quadruple precision 쿼드러플 프리시젼도 있기는 한데 보통은 double precision을 많이 쓴다.
...
통상 double precision이면 충분하다.
...

출처: https://qt3b1s62da6s.tistory.com/368 [이름이 없는 블로그]

결국 product 테이블의 price 컬럼은 DecimalField로 설정했다.

profile
비진

0개의 댓글