MATLAB 숫자 유형: 정수, 부동소수점, 변환과 범위 총정리
MATLAB 숫자 클래스 개요
MATLAB은 부호 있는/없는 정수형과 단정도/배정도 부동소수점형을 지원합니다. 기본적으로 모든 숫자 값은 배정도(double) 부동소수점으로 저장됩니다. 필요에 따라 정수형이나 단정도(single)로 저장할 수도 있습니다. 모든 숫자 유형은 기본 배열 연산과 수학 연산을 지원합니다.
숫자 데이터 유형 변환 함수
| 함수 | 용도 |
| double | 배정도 숫자로 변환 |
| single | 단정도 숫자로 변환 |
| int8 | 8비트 부호 있는 정수로 변환 |
| int16 | 16비트 부호 있는 정수로 변환 |
| int32 | 32비트 부호 있는 정수로 변환 |
| int64 | 64비트 부호 있는 정수로 변환 |
| uint8 | 8비트 부호 없는 정수로 변환 |
| uint16 | 16비트 부호 없는 정수로 변환 |
| uint32 | 32비트 부호 없는 정수로 변환 |
| uint64 | 64비트 부호 없는 정수로 변환 |
예제: 다양한 유형으로 변환 후 연산
x = single([5.32 3.47 6.28]) .* 7.5
x = double([5.32 3.47 6.28]) .* 7.5
x = int8([5.32 3.47 6.28]) .* 7.5
x = int16([5.32 3.47 6.28]) .* 7.5
x = int32([5.32 3.47 6.28]) .* 7.5
x = int64([5.32 3.47 6.28]) .* 7.5
실행 결과:
x = 39.9000 26.0250 47.1000
x = 39.9000 26.0250 47.1000
x = 38 23 45
x = 38 23 45
x = 38 23 45
x = 38 23 45
정수형에서는 소수 부분이 잘림(반올림 아님)됩니다.
예제: int32/int64 후 cell 배열 변환
x = int32([5.32 3.47 6.28]) .* 7.5
x = int64([5.32 3.47 6.28]) .* 7.5
x = num2cell(x)
실행 결과:
x = 38 23 45
x = 38 23 45
x = { [1,1] = 38; [1,2] = 23; [1,3] = 45 }
정수형 최솟값/최댓값 확인
intmax(), intmin() 함수는 각 정수 유형이 표현 가능한 최댓값/최솟값을 반환합니다. 인수로 데이터 유형 문자열을 전달합니다(예: intmax('int8')).
예제: 모든 정수 유형의 범위 출력
str = 'The range for int8 is:\n\t%d to %d ';
sprintf(str, intmin('int8'), intmax('int8'))
str = 'The range for int16 is:\n\t%d to %d ';
sprintf(str, intmin('int16'), intmax('int16'))
str = 'The range for int32 is:\n\t%d to %d ';
sprintf(str, intmin('int32'), intmax('int32'))
str = 'The range for int64 is:\n\t%d to %d ';
sprintf(str, intmin('int64'), intmax('int64'))
str = 'The range for uint8 is:\n\t%d to %d ';
sprintf(str, intmin('uint8'), intmax('uint8'))
str = 'The range for uint16 is:\n\t%d to %d ';
sprintf(str, intmin('uint16'), intmax('uint16'))
str = 'The range for uint32 is:\n\t%d to %d ';
sprintf(str, intmin('uint32'), intmax('uint32'))
str = 'The range for uint64 is:\n\t%d to %d ';
sprintf(str, intmin('uint64'), intmax('uint64'))
실행 결과 (일부):
ans = The range for int8 is: -128 to 127
ans = The range for int16 is: -32768 to 32767
ans = The range for int32 is: -2147483648 to 2147483647
ans = The range for int64 is: -9223372036854775808 to 9223372036854775807
ans = The range for uint8 is: 0 to 255
ans = The range for uint16 is: 0 to 65535
ans = The range for uint32 is: 0 to 4294967295
ans = The range for uint64 is: 0 to 18446744073709551615
※ 원문 출력 예시에는 int64/uint64 범위가 잘못 표기되어 있어 올바른 값으로 수정했습니다.
부동소수점형 최솟값/최댓값 확인
realmax(), realmin() 함수는 부동소수점 유형의 최댓값/최솟값을 반환합니다. 인수로 'single' 또는 'double'을 지정합니다.
예제: 단정도/배정도 범위 출력
str = 'The range for single is:\n\t%g to %g and\n\t %g to %g';
sprintf(str, -realmax('single'), -realmin('single'), realmin('single'), realmax('single'))
str = 'The range for double is:\n\t%g to %g and\n\t %g to %g';
sprintf(str, -realmax('double'), -realmin('double'), realmin('double'), realmax('double'))
실행 결과:
ans = The range for single is: -3.40282e+38 to -1.17549e-38 and 1.17549e-38 to 3.40282e+38
ans = The range for double is: -1.79769e+308 to -2.22507e-308 and 2.22507e-308 to 1.79769e+308