달력

8

« 2020/8 »

  •  
  •  
  •  
  •  
  •  
  •  
  • 1
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
  •  


 

실수

·         소수부나 지수부가 있는 수를 가리킵니다.

·         소수점을 가진 숫자를 표현합니다.

·         정수보다 훨씬 넓은 표현 범위를 가집니다.

·         정수 표현방식보다 중요합니다.

·         실수는 오차 동반

 

 

 

실수 표현

실수 표현의 문제점

·         0 1사이의 실수만 해도 수가 무한대

·         단순히 바이트 정도로 모든 실수를 표현하는 것은 불가능합니다.

 

 

문제점에 대한 해결책

정확도를 포기하고, 대신에 표현할 있는 값의 범위를 넓히고 근사값을 사용합니다.

 

 

0 1 통한 정수와 실수 표현


1.1 1.2사이에도 무한 대의 실수값이 존재하므로 0 1로는 정확한 실수값을 표현할 없는 한계 있습니다.

실수를 표현하기 위한 한계를 해결하기 위해 근사치를 사용하게 됩니다.

실수형 데이터의 오차는 자바뿐만 아니라 모든 프로그래밍 언어에서 발생하는 공통된 문제입니다.

 

 

 

 

 

Posted by codedragon codedragon

댓글을 달아 주세요

float형 오차 발생

실수형은 기본적으로 double형을 선호

C언어 컴파일러는 기본적으로 실수를 소수점 6자리 출력해 줍니다.


 

소스코드

#include <stdio.h>

int main(void) {

float num1=0.123456789012345;

double num2=0.123456789012345;

printf("float : %f \n", num1); //0.123457 출력

//0.123456 789012345

printf("double : %lf \n", num2); //0.123457 출력

//6째자리까지 반올림해서 표현

//%.15f: float형을 15자리까지 표현

printf("float : %.15f \n", num1); //0.123456791043282 출력

//0.123456 789012345

//float형은 6째자리까지가 의미있는 데이터, 그래서 6자리를 넘어서는 자리부터는 데이터의 오차가 발생

printf("double : %.15lf \n", num2); //0.123456789012345 출력

float num3=0.123456; // float num1=0.123456F;

//실수형은 기본적으로 double형을 선호하기 때문에 double형으로 연산을 수행하게 됩니다.

//double형을 float형으로 변환시 데이터 손실이 발생할 있으므로 명시적으로 숫자뒤에 F 붙여주어야 합니다.

//(큰자료형에서 작은자료형으로 변환되므로)

//해결방법: 출력을 %lf하거나 자료형뒤에 F 붙여 명시적으로 float형임을 표시해줍니다.

printf("float : %f \n", num3); // 0.123456(소수점 6자리까지 출력)

printf("float : %.2f \n", num3); // 0.12(소수점 2자리까지 출력)

return 0;

}


   

   

출력결과

   

Posted by codedragon codedragon

댓글을 달아 주세요

   

숫자 출력

   

   

강의내용

  • 숫자 출력
  • 소수점 6자리이상 초과할 경우 반올림과 반내림으로 오차 발생

   

   

소스코드

   

  1. #include <stdio.h>
  2. int main()
  3. {
  4. //숫자 출력
  5.         printf("%d + %d = %d 입니다 \n",3,7,3+7);
  6.         printf("%i + %i = %i 입니다 \n",3,7,3+7);
  7.         printf("%d - %d = %d 입니다 \n",3,7,3-7);
  8.         printf("%i - %i = %i 입니다 \n",3,7,3-7);
  9.         printf("10진수 %d 16진수로 %x, 8진수로 %o 입니다\n", 30, 30, 30);
  10.         //16진수와 8진수 부호가 있는 음수 표현 불가
  11.         printf("10진수 %d 16진수로 %x, 8진수로 %o 입니다\n", -30, -30, -30);
  12.         printf("10진수 정수: %d  \n",0.6);
  13.         printf("10진수 실수: %f  \n",0.6);
  14.         printf("10진수 실수: %lf \n",0.6);
  15.         // 마지막 자리값 반올림
  16.         printf("소수점 이하 6자리 이상: %f  \n",0.5678967);
  17.         //소수점 이하 6자리 초과한 반내림
  18.         printf("소수점 이하 6자리 이상: %lf \n",0.567896789);
  19.         //소수점 6자리이상 초과할 경우 반올림과 반내림으로 오차 발생
  20.         printf("%d \n", 2147483647);    //2147483647 정상출력
  21.         printf("%d \n", 2147483650);    // -2147483646 쓰레기값(정수표현이 넘어가므로)
  22.         // 2147483647 두배 (정수의 표현범위를 벗어나면 %u사용)
  23.         printf("%u \n", 4294967295);
  24. //기타 실수 표기법
  25.         printf("%f \n", 0.000123);  // 소수점 이하 6자리
  26.         printf("%f \n", 0.0001236); // 소수점 이하 6자리 초과
  27.         printf("%e \n", 0.000123); // 소수점 이하 6자리
  28.         printf("%E \n", 0.0001236); // 소수점 이하 6자리 초과
  29.         //소수점 이하 자리 수에 따라 %f, %e 하나를 선택
  30.         printf("%g \n", 0.000123); // 소수점 이하 6자리
  31.         printf("%G \n", 0.0000123456); // 소수점 이하 6자리 초과
  32. //필드 지정
  33. //%03d : 필드 폭을 3 확보하고 오른쪽 정렬, 남은 자리는 0으로 채움
  34. //%-3d : 필드 폭을 3 확보하고 왼쪽 정렬
  35. //%+3d : 필드 3 확보하고 오른쪽 정렬, 양수는 +, 음수는출력
  36.         printf("%03d, %03d, %03d \n",1,20,300);
  37.         printf("%-3d, %-3d, %-3d \n",1,20,300);
  38.         printf("%+3d, %+3d, %+3d \n",1,20,300);
  39.         printf("%+3d, %+3d, %+3d \n",1,20,-300);
  40.         printf("올해 우리나라 경제 성장률은 5%% \n");
  41.         return 0;
  42. }

 


 

   

출력결과

   

   

'Development > C/C++' 카테고리의 다른 글

Ex05-키보드로 부터 정수 입력  (0) 2014.12.21
Ex04-문자와 문자열 출력  (0) 2014.12.20
Ex03-숫자 출력  (0) 2014.12.19
Ex02-출력 문자, 확장 특수 출력문자  (0) 2014.12.18
Ex01- printf()  (0) 2014.12.17
printf() vs scanf()  (0) 2014.12.16
Posted by codedragon codedragon

댓글을 달아 주세요