-
[C++ 프로그래밍] 부동 소수점(Floating Point) 숫자와 정밀도2024년 06월 21일
- 유니얼
-
작성자
-
2024.06.21.:42
728x90C++ 기초 프로그래밍: 부동 소수점(Floating Point) 숫자와 정밀도
C++ 프로그래밍에서 부동 소수점 숫자는 실수를 표현하는 중요한 데이터 타입입니다. 부동 소수점 숫자는 주로 소수점 이하의 정밀도를 필요로 하는 계산에서 사용됩니다. 이번 블로그 글에서는 C++에서 부동 소수점 숫자를 사용하는 방법과 그 정밀도에 대해 알아보겠습니다.
부동 소수점 데이터 타입
C++에서는 부동 소수점을 표현하기 위해 세 가지 주요 데이터 타입을 사용합니다:
- float: 4바이트 크기로, 대략 7자리의 정확도를 가집니다.
- double: 8바이트 크기로, 대략 15자리의 정확도를 가집니다.
- long double: 보통 8바이트 이상 크기로, double보다 높은 정밀도를 가질 수 있습니다.
예제 코드
다음 예제 코드는 부동 소수점 데이터 타입을 선언하고, 각 타입의 크기와 정밀도를 출력합니다.
#include <iostream> #include <iomanip> int main() { // 변수 선언 및 초기화 float number1{1.12345678901234567890f}; // 정확도 : 7자리 double number2{1.12345678901234567890}; // 정확도 : 15자리 long double number3{1.12345678901234567890L}; std::cout << std::endl; std::cout << "-------------------------" << std::endl; std::cout << std::endl; // 자료형 크기 출력 std::cout << "sizeof float : " << sizeof(float) << std::endl; std::cout << "sizeof double : " << sizeof(double) << std::endl; std::cout << "sizeof long double : " << sizeof(long double) << std::endl; // 정밀도 설정 및 값 출력 std::cout << std::setprecision(20); // std::cout을 통해 정밀도 제어 std::cout << "number1 is : " << number1 << std::endl; // 7자리 std::cout << "number2 is : " << number2 << std::endl; // 15자리 std::cout << "number3 is : " << number3 << std::endl; // 15자리 이상 std::cout << std::endl; std::cout << "-------------------------" << std::endl; std::cout << std::endl; // 부동 소수점 문제: 많은 응용 프로그램에서는 정밀도가 너무 제한적임 float number4 = 192400023.0f; // 오류: 축소 변환 std::cout << "number4 : " << number4 << std::endl; // 과학적 표기법 // 지금까지 본 부동 소수점 타입은 고정 표기법. 과학적 표기법도 있음. // 매우 큰 숫자나 작은 숫자를 표현할 때 유용함 std::cout << std::endl; std::cout << "-------------------------" << std::endl; std::cout << std::endl; double number5{192400023}; double number6{1.92400023e8}; double number7{1.924e8}; // 00023 생략 가능 double number8{0.00000000003498}; double number9{3.498e-11}; // 10의 -11승과 곱함 std::cout << "number5 is : " << number5 << std::endl; std::cout << "number6 is : " << number6 << std::endl; std::cout << "number7 is : " << number7 << std::endl; std::cout << "number8 is : " << number8 << std::endl; std::cout << "number9 is : " << number9 << std::endl; std::cout << std::endl; std::cout << "-------------------------" << std::endl; std::cout << std::endl; // 무한대와 NaN(Not a Number) std::cout << std::endl; std::cout << "Infinity and NaN" << std::endl; double number10{-5.6}; double number11{}; // 0으로 초기화 double number12{}; // 0으로 초기화 std::cout << std::endl; std::cout << "-------------------------" << std::endl; std::cout << std::endl; // 무한대 double result{number10 / number11}; std::cout << number10 << "/" << number11 << " yields " << result << std::endl; std::cout << result << " + " << number10 << " yields " << result + number10 << std::endl; // NaN result = number11 / number12; std::cout << number11 << "/" << number12 << " = " << result << std::endl; std::cout << std::endl; std::cout << "-------------------------" << std::endl; return 0; // ------------------------- // sizeof float : 4 // sizeof double : 8 // sizeof long double : 16 // number1 is : 1.1234568357467651367 // number2 is : 1.1234567890123456912 // number3 is : 1.1234567890123456789 // ------------------------- // number4 : 192400016 // ------------------------- // number5 is : 192400023 // number6 is : 192400023 // number7 is : 192400000 // number8 is : 3.4979999999999998372e-11 // number9 is : 3.4979999999999998372e-11 // ------------------------- // Infinity and NaN // ------------------------- // -5.5999999999999996447/0 yields -inf // -inf + -5.5999999999999996447 yields -inf // 0/0 = nan // ------------------------- }
출력 결과
이 예제에서는 다양한 부동 소수점 숫자의 초기화와 출력을 통해 각 타입의 크기와 정밀도를 확인할 수 있습니다. 또한, 부동 소수점 연산에서 발생할 수 있는 문제인 무한대와 NaN(Not a Number)을 다룹니다.
부동 소수점의 과학적 표기법
부동 소수점 숫자는 고정 표기법 외에도 과학적 표기법으로 표현할 수 있습니다. 과학적 표기법은 매우 큰 숫자나 작은 숫자를 효율적으로 표현하는 데 유용합니다. 예를 들어, 1.924e8은 1.924 * 10^8을 의미합니다.
무한대와 NaN
부동 소수점 연산에서 0으로 나누는 등의 잘못된 연산이 발생하면 무한대 또는 NaN이 반환될 수 있습니다.
- 무한대: 숫자를 0으로 나누면 양의 무한대 또는 음의 무한대가 됩니다.
- NaN: 0을 0으로 나누면 NaN이 됩니다.
결론
부동 소수점 숫자는 C++ 프로그래밍에서 실수를 표현하는 중요한 데이터 타입입니다. float, double, long double 타입을 사용하여 다양한 정밀도의 실수를 다룰 수 있으며, 과학적 표기법을 통해 큰 숫자나 작은 숫자를 효율적으로 표현할 수 있습니다. 또한, 부동 소수점 연산에서 발생할 수 있는 무한대와 NaN에 주의하여야 합니다.
반응형다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드
받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이
감지되어도 모달 창이 표시되지 않습니다.)