"Double"의 두 판 사이의 차이

해시넷
이동: 둘러보기, 검색
(저장과정)
1번째 줄: 1번째 줄:
'''double'''은 변수 선언중에서 실수형(예 : 10.24432)변수를 선언할 때 쓰인다.
+
'''double'''은 변수 선언 중에서 실수형(예 : 10.24432) 변수를 선언할 때 쓰인다.
  
 
==범위==
 
==범위==
C언어에서 double형의 표현 범위는 전체크기가 8바이트 인데 지수부분을 11비트로 늘린 것으로, [[소수]]부분을 52비트로 잡고 같은 방식으로 계산하면 대략 -1.79×10308 ~ 1.79×10308 까지의 값이 나오며,15자리까지 표현할 수 있으며 그 형식은 <ref> 이종헌, 〈[https://blog.daum.net/iiiiiiiiiiiiiii99/16590270 double vs float 정수형의 표현 범위.]〉, 《다음블로그》, 2008-09-16 </ref>
+
C언어에서 double형의 표현 범위는 전체크기가 8바이트인데 지수부분을 11bit로 늘린 것으로, [[소수]]부분을 52bit로 잡고 같은 방식으로 계산하면 대략 -1.79×10308 ~ 1.79×10308까지의 값이 나오며, 15자리까지 표현할 수 있다.<ref> 이종헌, 〈[https://blog.daum.net/iiiiiiiiiiiiiii99/16590270 double vs float 정수형의 표현 범위.]〉, 《다음블로그》, 2008-09-16 </ref>
  
 
==저장과정==
 
==저장과정==
IEEE 754는 IEEE에서 개발한 컴퓨터에서 부동소수점을 표현하는 가장 널리 쓰이는 표준이며  C에서는 double은 배정도와 대응된다.다음은 실수8.5를 double에 저장과정이다.
+
IEEE 754는 IEEE에서 개발한 컴퓨터에서 부동소수점을 표현하는 가장 널리 쓰이는 표준이며  C에서는 double은 배정도(배정밀도(double precision) 64비트)와 대응된다. 다음은 실수 8.5를 double에 저장하는 과정이다.
 
#2진수 변환 : 변환하고자 하는 숫자가 8진수, 10진수, 16진수든 상관없이 변환하고자 하는 숫자를 2진수로 변환하는 것으로 8.5를 2진수로 변환하면 1000.1이다.
 
#2진수 변환 : 변환하고자 하는 숫자가 8진수, 10진수, 16진수든 상관없이 변환하고자 하는 숫자를 2진수로 변환하는 것으로 8.5를 2진수로 변환하면 1000.1이다.
 
#정규화 (Specific notation) : 변환한 2진수를 정규화하는 것으로 1000.1x(2^3)(^3 : 세제곱)
 
#정규화 (Specific notation) : 변환한 2진수를 정규화하는 것으로 1000.1x(2^3)(^3 : 세제곱)
 
#IEEE 754 double precision
 
#IEEE 754 double precision
*지수부(exponent) : IEEE 754 는 bias 표현법으로 양수와 음수를 표현하고 지수부(exponent) = bias + power, 지수부가 n비트라면 2^(n-1) - 1을 바이어스 상수라고 하며 정규화결과 1.0001x 2^3이므로 power = 3이고, 지수부는 11bit 이므로 bias = 1023 지수부(exponent) = bias + power = 1023 + 3 = 1026이고 이것을 2진수로 변환하여 지수부에 대응한다.
+
*지수부(exponent) : IEEE 754 는 bias 표현법으로 양수와 음수를 표현하고 지수부(exponent) = bias + power, 지수부가 n 비트라면 2^(n-1) - 1을 바이어스 상수라고 하며 정규화 결과 1.0001x 2^3이므로 power = 3이고, 지수부는 11bit이므로 bias = 1023 지수부(exponent) = bias + power = 1023 + 3 = 1026이고 이것을 2진수로 변환하여 지수부에 대응한다.
*가수부 : 정규화 한 값의 소수점 아래 부분을 가수부에 순서대로 입력하고 나머지는 모두 0으로 처리하고 소수점 아래 부분은 0001 이므로 00010000.....0000으로 가수부에 입력
+
*가수부 : 정규화한 값의 소수점 아랫부분을 가수부에 순서대로 입력하고 나머지는 모두 0으로 처리하고 소수점 아랫부분은 0001이므로 00010000.....0000으로 가수부에 입력하는 이런 식의 과정을 거친다.<ref> ComputerScience, 〈[https://backstreet-programmer.tistory.com/140 (컴퓨터과학/C언어) IEEE 754 double 형 변환 (64bit)]〉, 《티스토리》, 2020-05-29 </ref>
이런식의 과정을 거친다.
+
 
 +
==표현==
 +
각 프로그래밍 마다 표현 방식이 다르다. 다음은 각 프로그래밍의 표현방식이다.
 +
 
 +
===C언어===
 +
double형은 %lf 로 출력한다고 하지만 float형과 같이 %f을 써도 출력이된다.(단,double형을 입력 받을 때는 %lf)

2021년 8월 20일 (금) 14:25 판

double은 변수 선언 중에서 실수형(예 : 10.24432) 변수를 선언할 때 쓰인다.

범위

C언어에서 double형의 표현 범위는 전체크기가 8바이트인데 지수부분을 11bit로 늘린 것으로, 소수부분을 52bit로 잡고 같은 방식으로 계산하면 대략 -1.79×10308 ~ 1.79×10308까지의 값이 나오며, 15자리까지 표현할 수 있다.[1]

저장과정

IEEE 754는 IEEE에서 개발한 컴퓨터에서 부동소수점을 표현하는 가장 널리 쓰이는 표준이며 C에서는 double은 배정도(배정밀도(double precision) 64비트)와 대응된다. 다음은 실수 8.5를 double에 저장하는 과정이다.

  1. 2진수 변환 : 변환하고자 하는 숫자가 8진수, 10진수, 16진수든 상관없이 변환하고자 하는 숫자를 2진수로 변환하는 것으로 8.5를 2진수로 변환하면 1000.1이다.
  2. 정규화 (Specific notation) : 변환한 2진수를 정규화하는 것으로 1000.1x(2^3)(^3 : 세제곱)
  3. IEEE 754 double precision
  • 지수부(exponent) : IEEE 754 는 bias 표현법으로 양수와 음수를 표현하고 지수부(exponent) = bias + power, 지수부가 n 비트라면 2^(n-1) - 1을 바이어스 상수라고 하며 정규화 결과 1.0001x 2^3이므로 power = 3이고, 지수부는 11bit이므로 bias = 1023 지수부(exponent) = bias + power = 1023 + 3 = 1026이고 이것을 2진수로 변환하여 지수부에 대응한다.
  • 가수부 : 정규화한 값의 소수점 아랫부분을 가수부에 순서대로 입력하고 나머지는 모두 0으로 처리하고 소수점 아랫부분은 0001이므로 00010000.....0000으로 가수부에 입력하는 이런 식의 과정을 거친다.[2]

표현

각 프로그래밍 마다 표현 방식이 다르다. 다음은 각 프로그래밍의 표현방식이다.

C언어

double형은 %lf 로 출력한다고 하지만 float형과 같이 %f을 써도 출력이된다.(단,double형을 입력 받을 때는 %lf)
  1. 이종헌, 〈double vs float 정수형의 표현 범위.〉, 《다음블로그》, 2008-09-16
  2. ComputerScience, 〈(컴퓨터과학/C언어) IEEE 754 double 형 변환 (64bit)〉, 《티스토리》, 2020-05-29