[6일차] 07. 자료형(datatype)-실수는 어떻게 표현하나요?

WOOJEON JANG·2021년 12월 30일
0

Part01. 자바 프로그래밍

ch 01. 자바 기초

07. 자료형(datatype)-실수는 어떻게 표현하나요?


<부동 소수점 방식>

  • 실수는 정수 보다 정밀하기 때문에 정수와는 다른 방식으로 표현해야 한다
  • 부동 소수점 방식으로 실수 값 0.1 표현
  • 지수부와 가수부로 표현 함
  • 컴퓨터에서는 밑수를 2로 사용
  • 정규화 : 가수가 밑수보다 작은 한 자리까지 가수로 표현되는 것

<float 형과 double형>

  • 자바에서 실수의 기본 타입은 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);
	   }
   }
  • 결과 :

<부동 소수점 방식의 오류> (이 부분은 눈으로 보고만 넘어갈 것 - 뒤에서 다시 배움)

  • 지수와 기수로 나타내는 부동 소수점 방식에서는 지수부가 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);
	}
}


<+수학 개념_실수>

  • Real number : 수학에서 실직선 위에 점이나, 십진수의 나열로 표현한 수

  • 컴퓨터에서 실수를 표현하기 위해서 다음과 같은 상황들이 고려되어야 한다.
    1.정수 부분과 소수 부분의 표현
    2.두 실수 사이에는 무한한 다른 실수가 존재하기 때문에 적절한 근사치로 표현

  • 십진수의 실수 표현 예제
    * 십진수 13.625는 십진법으로 표현하면 아래와 같다

  • 십진수로 표현된 실수를 이진수로 표현하는 방법
    * 13.125에서 13은 1101(2)로 표현될 수 있다.

    • 소수 부분은 아래와 같이 계산한다.

<+수학 개념_실수 표현법>

  • 고정 소수점 표기법(fixted point notation)
  • 부동 소수점 표기법(floating point notation)
    (여기서 '부동'은 '고정되지 않고 움직인다'는 의미로 쓰인다)
    (둘의 가장 큰 차이점은 소수점이 움직일 수 있는지 없는지이다)
    * 고정 소수점 표기법
    32비트 실수를 고정 소수점 방식으로 표현하면 아래와 같다
  • 고정 소수점은 부호, 정수부, 소수부를 표현하는 3부분으로 나뉘고 이 크기가 고정되어있다. 이런 이유로 아주 큰수나 아주 작은 수를 표현하기에는 적합하지 않다. ==> 실수 표현 범위가 넓지않다.

* 부동소수점 표기법
소수점의 위치가 변하는 실수 표기법
컴퓨터에서 사용하는 부동 소수점 표기법은 IEEE754 표현법을 따른다.

  • 부호 비트(singed bit) : 최상위 1bit로 0(양수) 1(음수)의 값을 갖는다.
  • 지수(exponent) : 수의 표현 범위를 나타내며, 지수에 의해서 소수점이 이동한다.
  • 가수(significand, fraction matissa): 양의 정수로 나타내며, 정밀도(precison)에 따라 다르다.
  • 부동 소수점 표기 예

==> 지수 값에 소수점이 이동하면서 큰 값과 작은 값을 표현할 수 있게 됨

하지만, 위와같이 표기하면 혼동이 있다. 같은 수를 서로 다른 부동 소수로 표기가 가능하기 떄문에, 정규화된 표기법(normalized notation)을 사용한다.

ex. -0.4를 10진수, 2진수로 각각 정규화해라

수학개념 참조 블로그 : https://gamedevlog.tistory.com/24?category=894993

오늘의 공부 소감 :
부동 소수점에 대한 개념을 알기 위해 기타 블로그의 설명을 참고하여 공부해보았다. 역시 언제 어디서 수학개념이 튀어나올지 몰라서, 항상 꾸준히 기초적인 수학들을 공부해야겠다.

profile
back-end enginneer

0개의 댓글