전체 코드
namespace CSharpGrammar
{
class Program
{
static void Main(string[] args)
{
float a;
a = 3.5f;
Console.WriteLine(a);
}
}
}
1. float의 정의
float
- 데이터 타입 소개
float은 소수점을 포함한 부동소수점 숫자를 저장하기 위한 데이터 타입입니다.
- "부동소수점"이란?
- 숫자의 정수부와 소수부를 분리하여, 메모리 크기에 맞추어 숫자를 효율적으로 저장하는 방식입니다.
float은 4바이트(32비트)를 사용하여 약 7자리 정도의 정밀도로 숫자를 표현할 수 있습니다.
- 예를 들어,
3.14, -2.718, 0.00001 등의 숫자를 저장할 때 사용됩니다.
2. float 변수 선언
float a;
- 변수 선언
a라는 이름의 float 타입 변수를 선언합니다.
- 이 시점에서는 변수
a가 선언만 되었을 뿐, 초기값이 할당되지 않았습니다.
- 변수 선언은 메모리에서 해당 변수를 위한 4바이트 공간을 예약하는 작업입니다.
3. float 변수 초기화
a = 3.5f;
- 변수 초기화
변수 a에 3.5f라는 값을 할당합니다. 여기서 중요한 점은 숫자 뒤에 f 접미사가 붙어야 한다는 것입니다.
- C#에서 소수점이 있는 숫자는 기본적으로
double 타입으로 간주됩니다.
- 따라서
3.5를 float 타입 변수에 저장하려면 f를 붙여야 합니다.
- 예:
float a = 3.5f; (올바름)
- 예:
float a = 3.5; (컴파일 오류 발생)
f는 숫자가 float 타입임을 명시적으로 나타냅니다.
4. float의 한계: 근사값
- 정확성의 제한
float 타입은 제한된 메모리 크기(4바이트)로 숫자를 표현하기 때문에 모든 숫자를 완벽하게 저장할 수 없습니다.
- 예를 들어,
0.333333...(무한 소수)와 같은 숫자는 float 타입으로 저장할 때 근사값으로 저장됩니다.
- 이는 부동소수점 방식의 특징으로, 컴퓨터는 가장 근사한 값을 저장합니다.
- 결과적으로,
float 타입을 사용할 경우 미세한 오차가 발생할 수 있습니다.
5. 메모리의 유한성
- 메모리 제한
컴퓨터는 물리적인 메모리 크기가 유한하기 때문에, float 타입도 4바이트 내에서 표현할 수 있는 값의 범위와 정밀도가 제한됩니다.
float 타입은 정수부와 소수부를 나누어 저장합니다:
- 1비트: 부호 비트 (양수/음수)
- 8비트: 지수 (Exponent, 소수점의 위치)
- 23비트: 가수 (Mantissa, 실제 숫자)
- 이 제한된 구조 때문에
float은 숫자를 근사치로 표현할 수밖에 없습니다.
6. 부동소수점 방식
- 근사값 저장
컴퓨터는 부동소수점 방식을 사용하여 숫자를 표현합니다.
- 숫자를 2진수로 변환한 후, 정수부와 소수부를 나누어 저장합니다.
- 예를 들어:
3.5는 2진수로 11.1입니다.
- 이를 부동소수점 방식으로 저장하면:
- 부호:
0 (양수)
- 지수:
10000001 (소수점 위치)
- 가수:
110000... (숫자의 유효숫자)
7. float의 크기와 정밀도
- 메모리 크기
float은 4바이트(32비트) 크기의 메모리를 사용합니다.
- 정밀도: 약 7자리(소수점 포함)의 숫자를 정확히 표현할 수 있습니다.
- 값의 범위: 약
-3.4 * 10^38 ~ +3.4 * 10^38까지 표현할 수 있습니다.
- 더 높은 정밀도가 필요하다면,
double(8바이트)을 사용할 수 있습니다.
8. float vs double
float f = 3.14f;
double d = 3.14;
- 메모리 크기 비교
float: 4바이트, 약 7자리 정밀도.
double: 8바이트, 약 15자리 정밀도.
- 사용 예:
float: 정밀도가 크게 필요하지 않은 계산(예: 게임의 속도, 거리).
double: 과학 계산, 금융 데이터 등 높은 정밀도가 필요한 경우.
9. 실수 연산의 비용
- 실수 연산의 복잡성
실수 연산은 정수 연산보다 더 많은 계산 단계를 필요로 하기 때문에 성능 비용이 더 큽니다.
- 예: 덧셈, 곱셈 등의 단순한 연산조차 정수보다 느립니다.
- 따라서 성능이 중요한 애플리케이션에서는 가능한
float이나 double 연산을 최소화해야 합니다.
10. 게임에서의 float 사용
- 게임에서의 적합성
게임에서는 초당 프레임 처리량(성능)이 중요하기 때문에, 메모리를 적게 사용하고 연산이 더 빠른 float 타입이 적합합니다.
- 예: 캐릭터의 속도(
speed = 3.5f)나 위치 데이터 등.
- 정밀도가 낮아도 큰 문제가 없는 경우,
float만으로 충분합니다.