cout << std::setprecision(16) << endl;
#include <iostream>
#include <cstdint>
int main()
{
using namespace std;
std::int16_t i(5);
std::int8_t myint = 65;
cout << myint << endl;
std::int_fast8_t fi(5);
std::int_least64_t fl(5);
}
위 함수는 고정 너비 정수를 나타낸 것으로
std::int16_t 는 16비트의 정수형, int8_t는 8비트 정수형을 의미합니다. 또한 myint 변수를 6로 초기화했습니다.
std::int_fast8_t는 최소한의 크기를 보장하면서 가장 빠른 정수형을 의미합니다. std::int_least64_t fl(5);는 적어도 64비트를 보장하는 정수형입니다.
Void 타입
void my_function(void)
{
}
리턴타입이 없을 때도 이렇게 void를 넣어주어야 합니다.
voi는 메모리 자체가 없기 때문에 선언을 할 수 없습니다.
int main()
{
int i = 123;
float f = 123.456;
void* my_void;
my_void = (void*)&i;
my_void = (void*)&f;
}
하지만 포인터를 이용해 void *my_void; 이런 식으로는 가능합니다. &i는 변수형 정수의 주소입니다. &f는 실수형 변수의 주소가 되는 것입니다.
어떤 데이터 타입은 메모리를 많이 차지하지만 첫 주소의 데이터의 양은 동일합니다.
부동소수점수
영역 | 형 | 최소 크기 | 전형적인 크기 |
부동소수점 | float | 4 | 4 |
double | 8 | 8 | |
Long double | 8 | 8, 12, 16 |
int main()
{
using namespace std;
float f;
double d;
long double ld;
cout << numeric_limits<float>::max() << endl;
cout << numeric_limits<double>::max() << endl;
cout << numeric_limits<long double>::max() << endl;
}
여기서 numeric_limits는 C++표준 라이브러리에서 제공하는 클래스 템플릿입니다. 데이터 타입의 수치적 특성을 사ㅣ용하는데 사용되며 최소값, 최대값, 정밀도 등의 정보를 제공합니다.
FLOAT, DOUBLE,long double 타입의 최댓값을 출력하는 것입니다.
#include <iostream>
#include <cstdint>
#include <limits>
int main()
{
using namespace std;
float f(3.141592f); //3.14 = 31.4 * 0.1
cout << 3.14 << endl;
cout << 31.4e-1 << endl;
cout << 31.4e-2 << endl;
cout << 31.4e1 << endl;
cout << 31.4e2 << endl;
}
숫자 수 조절하기
#include <iostream>
#include <limits>
#include <iomanip>
int main()
{
using namespace std;
cout << std::setprecision(16) << endl;
cout << 1.0 / 3.0 << endl;
return 0;
}
부동 소수점의 숫자를 출력할 때 아래 자릿수를 지정하는 것입니다.
<iomanip> 가 입출력의 형식을 제어하기 위한 헤어 파일입니다.
cout << std::setprecision(16) << endl;
여기서 std::setprecision(16)은 부동 소수점의 숫자의 소수점 아래 자릿수를 16자리로 설정한다는 것입니다.
#include <iostream>
#include <limits>
#include <iomanip>
int main()
{
using namespace std;
double zero = 0.0;
double posinf = 5.0 / zero;
double neginf = -5.0 / zero;
double nan = zero / zero;
cout << posinf << endl;
cout << neginf << endl;
cout << nan << endl;
return 0;
}
이렇게 0을 대입하면 inf , -inf , -nan(ind) 이런 무한대나 값을 정의할 수 없는 기로가 나오게 됩니다. 이런 숫자가 나오면 안되기 때문에 코딩을 할 때 이런 경우를 대비해서 NaN 연산자를 넣어주어야 합니다.
#include <iostream>
#include <limits>
#include <iomanip>
#include <cmath>
int main()
{
using namespace std;
double zero = 0.0;
double posinf = 5.0 / zero;
double neginf = -5.0 / zero;
double nan = zero / zero;
cout << posinf << std::isnan(nan) << endl;
cout << neginf << std::isnan(nan) << endl;
cout << nan << " " << std::isnan(nan) << endl;
cout << 1.0 << " " << std::isnan(nan) << endl;
return 0;
}
nan은 Not a Number의 약자입니다. 부동 소수점의 숫자 중 하나로, 유효한 숫자가 아닌 값을 나타냅니다. NaN인지 여부를 검사하고 그 결과를 반환합니다.
'IT 프로그래밍 > C++' 카테고리의 다른 글
[따배시 2.7] char type (0) | 2024.03.07 |
---|---|
[따배시 2.6] 불리언 연산자와 조건문 if (0) | 2024.03.07 |
[따배시 1.12~14] 헤더가드, 네임스페이스, 전처리기 (0) | 2024.03.05 |
[따배시 1.8~2.0] 연산자와의 첫 만남, 기본적인 서식 맞추기, 정의 (0) | 2024.03.05 |
[따배시 1.6~7] 키워드와 식별자 이름짓기, 지역범위 (0) | 2024.03.05 |