검수요청.png검수요청.png

Double

위키원
이동: 둘러보기, 검색

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

개요[편집]

double은 8바이트(64비트) 크기를 가지는 기본 자료형이다. IEEE 754 표준은 실수 값을 저장하기 위해 4바이트, 8바이트, 16바이트 등의 저장 형식을 정의했는데, 그 중 하나가 double이다. double 형식은 전체 크기가 8바이트인데 지수 부분을 11비트로 늘린 것이다. C 컴파일러는 이 표준에 따라 구현했다. C언어에서 소수 부분을 52비트로 잡고 같은 방식으로 계산하면 대략 -1.79×10308 ~ 1.79×10308까지의 값이 나오며, 15자리까지 표현할 수 있다.[1]

저장 과정[편집]

다음은 실수 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 정밀도
    • 지수부 : IEEE 754 는 바이아스 표현법으로 양수와 음수를 표현하고 지수부(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로 출력한다.

출력[편집]

실수 자료형 변수 선언과 출력에 대한 예제이다. double을 printf로 출력할 때는 서식 지정자로 %f를 사용한다.[3]

int main()
{
    double num2 = 3867.215820; // 배정밀도 부동소수점 변수를 선언하고 값을 할당, // double은 숫자 뒤에 아무것도 붙이지 않음
    printf("%f\n", num2);    // 3867.215820
    return 0;
}
실행 결과 : 3867.215820

지수 자료형 변수 선언과 출력에 대한 예제이다. double을 printf로 출력할 때는 서식 지정자로 %e를 사용한다.[3]

int main()
{
    double num2 = -1.3827e-2; // 지수 표기법으로 -0.013827을 표기, // double은 숫자 뒤에 아무것도 붙이지 않음
    printf("%e\n", num2); // -1.382700e-02
    return 0;
}

입력[편집]

실수, 지수 자료형을 입력한 식을 출력한 예제이다. 실수를 입력할 때에는 %lf, 지수로 입력할 때는 %le를 이용한다.[4]

int main()
{
    double d1, d2;
    scanf("%lf %le", &d1, &d2);
    printf("double형 실수 출력 : d1=%lf, d2=%le ", d1, d2);
    return 0;
}

자바[편집]

출력[편집]

다음 예제와 같이 f를 붙여주지 않아도 소수점을 표현할 수 있다.[5]

public class Main {
public static void main(String[] args) {
double number = 0.01;
System.out.println(number);
      }
}
실행 결과 : 0.01

하지만 정확성이 떨어지는 단점이 있다.[5]

public class Main {
public static void main(String[] args) {
double number = 0.01 + 0.001+ 0.0001;
System.out.println(number);
      }
}
실행 결과 : 0.011099999999999999

입력[편집]

public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner( System.in )
System.out.print( "오늘의 이율은? : " );
double rate = scan.nextDouble();
System.out.println( rate + " %" );
      }
}

스캐너(scanner)는 자바에서 키보드로 데이터를 입력받을 때 사용하는 클래스이다.[6]

형변환[편집]

Double.Parse()
string a = "154.88";
Double b = (Double.Parse(a));
MessageBox.Show(b.ToString());

Double.Parse() 함수는 값을 double로 변환해 준다. 위의 결과는 154.88 정수로 변환이 되어 출력된다.

Double.TryParse()
string a = "154.88";
Double b;
if (Double.TryParse(a, out b))
{
    MessageBox.Show(b.ToString());
}
else
{
    MessageBox.Show("숫자가 아닙니다.");
}

위의 결과는 변환이 성공한 경우 정수 값을 변환하여 154.88를 띄우고, 실패할 경우 '숫자가 아닙니다.'라는 메세지를 띄운다. Double.TryParse 함수는 두 가지의 인자를 받는다. 첫 번째는 변환할 문자열이고, 두 번째는 out 키워드로 수정되며 반환되는 값은 TryParse의 성공 여부를 나타낸다. Double.TryParse의 반환값은 bool형이며 성공적으로 변환이 되었으면 true, 그렇지 않으면 false가 반환된다. out b의 의미는 결과값을 b에 저장하라는 의미이다. 즉, Double.Parse() 함수와 Double.TryParse() 함수의 차이점은 Double.Parse() 함수는 값만 변환해 주는 것이며 Double.TryParse() 함수는 값을 변환하면서 값의 성공 여부를 확인할 수 있다.[7]

각주[편집]

  1. 이종헌, 〈double vs float 정수형의 표현 범위.〉, 《다음 블로그》, 2008-09-16
  2. ComputerScience, 〈(컴퓨터과학/C언어) IEEE 754 double 형 변환 (64bit)〉, 《티스토리》, 2020-05-29
  3. 3.0 3.1 실수형 변수 선언하기〉, 《코딩도장》
  4. 네트동자, 〈No.20 실수값을 입력할 때 사용하는 서식문자.〉, 《티스토리》, 2008-09-16
  5. 5.0 5.1 자바(Java) 강의, 〈자바 변수와 자료형 (4) float, double〉, 《티스토리》, 2019-03-05
  6. 프로그래밍/자바(java), 〈JAVA - SCANNER , SYSTEM.IN 키보드 데이터 입력받기〉, 《티스토리》, 2019-06-25
  7. Mir.J Webma_Mir, 〈(C#/.Net)(String To Double) String 을 Double 로 형변환하기〉, 《티스토리》, 2021-01-06

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 Double 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.