부동 소수점 형식 (Floating Point Type)
- 부동 소수점을 이용하여 표현하면, 소수점을 이동해 수를 고정했을 때 보다
더 제한된 bit
를더 넓은 범위
를 표현할 수 있음 - 하지만 해당 형식은
정수 형식
을 대체할 수 는 없음-
소수점, 부호
를 표현하기 위해 일부 비트를 사용- 같은 크기의 정수 계열 형식과 같은 크기의 수를 표현할 수 없음
- 산술 연산 과정이 정수 계열 형식보다 복잡해서 느림
-
데이터 형식 | 설명 | 크기(byte) | 범위 |
---|---|---|---|
float | 단일 정밀도 부동 소수점 형식 (7개의 자릿수만 다룰 수 있음) |
4(32bit) | -3.402823e38 3.402823e38 |
double | 복수 정밀도 부동 소수점 형식 (15~16개의 자릿수를 다룰 수 있음) |
8(64bit) | -1.79769313486232e308 1.79769313486232e308 |
정밀도
- 4 byte (36bit) 크기의 float 형식은 수를 표현
- 1bit를 부호 전용(sign bit)으로 사용
- 가수부 23bit (Mantissa)를 수를 표현하는데 사용
- 지수부 8bit (Exponent) 소수점을 나타내기 위해 사용
- float 의 경우 -3.402823e38 ~ 3.402823e38 에 이르는 큰 수를 다루지만, 유효숫자는 7자리 뿐
- 7자리 이상의 수는
대략적으로
표현해서 float 의 경우한정된 정밀도 (Single Precision)
를 가짐 - double의 경우 두 배의 메모리(8byte)를 사용하여
복수 정밀도 (double Precision)
을 가짐
public static class IntegralTypes
{
private static void Main()
{
FloatingPoint();
}
private static void FloatingPoint()
{
double a = double.Pi;
WriteLine($"double : {a}");
float b = (float)a;
WriteLine($"float : {b}");
}
}
decimal 형식
- 부동소수점과는 다른 방식으로 소수를 다루며 정밀도가 훨씬 높은 형식
데이터 형식 | 설명 | 크기(byte) | 범위 |
---|---|---|---|
decimal | 29자리 데이터를 표현할 수 있는 소수형식 | 16(128bit) | +-1.0 x 10e-28 +-7.9 x 10e28 |
public static class IntegralTypes
{
private static void Main()
{
Decimal();
}
private static void Decimal()
{
decimal a = 3.1415_9265_3589_7932_3846_2643_3832_79m;
WriteLine($"Decimal: {a}");
double b = 3.1415_9265_3589_7932_3846_2643_3832_79;
WriteLine($"Double: {b}");
float c = 3.1415_9265_3589_7932_3846_2643_3832_79f;
WriteLine($"Float: {c}");
}
}