본문 바로가기
Java/[패스트캠퍼스] Java & SpringBoot로 시작하는 웹 프로그래밍

Ch 01. 자바 기초 - 07. 자료형(data type) - 실수는 어떻게 표현하나요?

by hinote 2022. 12. 28.

 

 

부동 소수점 방식

 

  • 실수는 정수 보다 정밀하기 때문에 정수와는 다른 방식으로 표현해야 함

-> 0과 1 사이에만 해도 엄청난 많은 수가 있는데 한정된 비트 안에서 표현하기란 쉽지 않음

  • 부동 소수점 방식으로 실수 값 0.1 표현

  • 지수부와 가수부로 표현 함
  • 컴퓨터에서는 밑수를 2로 사용
  • 정규화 : 가수가 밑수보다 작은 한 자리까지 가수로 표현 되는 것
  • 컴퓨터에서는 밑수가 2 이므로 정규화를 하게 되면 가수부분의 첫 번째 자리 숫자는 항상 1임
    예) 0.2 표현 0.4 X 2-1 정규화 하면 1.6 X 2-3

 

 

 

 

 

 

 

 

 


float 형과 double형

 

 

 


float형은 4바이트
double형은 8바이트 할당
이중에 특정한 계수의 비트를 지수부와 가수부에 할당함
이렇게 할당을 하게 되면 훨씬 많은 실수를 표현할 수 있다

정규화 : 밑수보다 작은 가수를 사용하는 것
1.m * (2^-n)

 

 

 

*자바에서 실수의 기본 타입은 double을 사용 함

 

 

 

 

float 와 double 예제

   package ch07;

   public class DoubleTest {

	   public static void main(String[] args) {
		   double dnum = 3.14;
		   float fnum = 3.14F;
		
		   System.out.println(dnum);
		   System.out.println(fnum);
	   }
   }



double dnum = 3.14;
float fnum = 3.14;

자바에서 실수의 기본 타입은 dobule을 사용 하기 떄문에 float fnum = 3.14; 은 에러가 뜸
f라는 식별자를 사용하여 float fnum = 3.14f; 로 수정할 시 에러 뜨지 않음
(이 말은 곧 기본 실수 리터럴이 8비트로 측정되어있기 때문에 4비트인 float에겐 큰 값임)

 

 

 

 

 

 

부동 소수점 방식의 오류

지수와 가수로 나타내는 부동 소수점 방식에서는 지수부가 0을 표현할 수 없기 때문에 약간의 오차가 발생할 수 있다

 

   public class DoubleTest2 {

	public static void main(String[] args) {

		double dnum = 1;
		
		for(int i = 0; i<10000; i++) {
			dnum = dnum + 0.1;
		}
		System.out.println(dnum);
	}
}

 

 

출력 결과 :

댓글