쌤리

부동소수점과 그 한계 본문

IT 관련

부동소수점과 그 한계

saml2l 2020. 5. 13. 12:26

부동소수점

부동소수점 타입 : float , double

 

  • 부동소수점 float 은 4 byte의 저장공간이 요구되며 1.4E-45 ~ 3.4028235E38 의 범위를 가진다.
    • 소수 6번째 자리까지 정확하게 표현이 가능하다.
  • 부동소수점 double 은 8 byte의 저장공간이 요구되고 4.9E-324 ~ 1.7976931348623157E308의 범위를 가진다. 소수 15번째 자리까지 오차없이 표현이 가능하다.
  • Float(Double).MIN_VALUER, Float(Double).MAX_VALUE 의 명령어로 최대,최소값 확인이 가능하다.
  • 부동소수점 연산의 정확도는 99.9%로 완벽하지 않은 정확도를 가지고 있다.
  • 공학계산기나 은행 입출납 시스템을 만들거나, 매우 높은 정확함이 요구되는 타이머를 만든다거나 할때 부동소수점을 사용해서는 제대로된 프로그램이 만들어지지 않을것이다.
  • 다음 예제는 부동 소수점 방식으로 실수를 표현할 때 발생할 수 있는 오차를 보여주는 예제이다.
  • double num = 0.1; for(int i = 0; i < 1000; i++) { num += 0.1; } System.out.print(num);
  • 실행결과는 0.1을 1000번 더한 합계인 100이 되어야 하지만 100.09999999999859 가 출력된다.
  • 이처럼 컴퓨터가 실수를 가지고 수행하는 모든 연산에는 언제나 작은 오차가 존재하게 된다.
Comments