MATLAB - Số

MATLAB hỗ trợ các lớp số khác nhau bao gồm các số nguyên có dấu và không dấu và các số dấu phẩy động chính xác đơn và chính xác kép. Theo mặc định, MATLAB lưu trữ tất cả các giá trị số dưới dạng số dấu chấm động có độ chính xác kép.

Bạn có thể chọn lưu trữ bất kỳ số hoặc mảng số nào dưới dạng số nguyên hoặc số chính xác đơn.

Tất cả các kiểu số đều hỗ trợ các phép toán mảng và phép toán cơ bản.

Chuyển đổi sang các loại dữ liệu số khác nhau

MATLAB cung cấp các hàm sau để chuyển đổi sang các kiểu dữ liệu số khác nhau:

Chức năng Mục đích
gấp đôi Chuyển đổi thành số chính xác gấp đôi
Độc thân Chuyển đổi thành số chính xác duy nhất
int8 Chuyển đổi thành số nguyên có dấu 8 bit
int16 Chuyển đổi thành số nguyên có dấu 16 bit
int32 Chuyển đổi thành số nguyên có dấu 32 bit
int64 Chuyển đổi thành số nguyên có dấu 64 bit
uint8 Chuyển đổi thành số nguyên không dấu 8 bit
uint16 Chuyển đổi thành số nguyên không dấu 16 bit
uint32 Chuyển đổi thành số nguyên không dấu 32 bit
uint64 Chuyển đổi thành số nguyên không dấu 64 bit

Thí dụ

Tạo tệp kịch bản và nhập mã sau:

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

Khi bạn chạy tệp, nó hiển thị kết quả sau:

x =

   39.900   26.025   47.100

x =

   39.900   26.025   47.100

x =

   38  23  45

x =

   38  23  45

x =

   38  23  45

x =

   38  23  45

Thí dụ

Hãy để chúng tôi mở rộng ví dụ trước hơn một chút. Tạo tệp kịch bản và nhập mã sau:

x = int32([5.32 3.47 6.28]) .* 7.5
x = int64([5.32 3.47 6.28]) .* 7.5
x = num2cell(x)

Khi bạn chạy tệp, nó hiển thị kết quả sau:

x =

   38  23  45

x =

   38  23  45

x = 
{
   [1,1] = 38
   [1,2] = 23
   [1,3] = 45
}

Số nguyên nhỏ nhất và lớn nhất

Chức năng intmax()intmin() trả về giá trị lớn nhất và nhỏ nhất có thể được biểu diễn với tất cả các loại số nguyên.

Cả hai hàm đều lấy kiểu dữ liệu số nguyên làm đối số, ví dụ, intmax (int8) hoặc intmin (int64) và trả về giá trị lớn nhất và nhỏ nhất mà bạn có thể đại diện cho kiểu dữ liệu số nguyên.

Thí dụ

Ví dụ sau minh họa cách lấy giá trị nhỏ nhất và lớn nhất của số nguyên. Tạo một tệp script và viết đoạn mã sau vào đó:

% displaying the smallest and largest signed integer data
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'))
 
% displaying the smallest and largest unsigned integer data
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'))

Khi bạn chạy tệp, nó hiển thị kết quả sau:

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:
	0 to 0 
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 -1 
ans = The range for uint64 is:
	0 to 18446744073709551616

Số dấu chấm động nhỏ nhất và lớn nhất

Chức năng realmax()realmin() trả về giá trị lớn nhất và nhỏ nhất có thể được biểu diễn bằng số dấu phẩy động.

Cả hai hàm khi được gọi với đối số 'single', đều trả về giá trị lớn nhất và nhỏ nhất mà bạn có thể biểu diễn với kiểu dữ liệu độ chính xác đơn và khi được gọi với đối số 'double', trả về giá trị lớn nhất và nhỏ nhất mà bạn có thể đại diện kiểu dữ liệu độ chính xác kép.

Thí dụ

Ví dụ sau minh họa cách lấy số dấu phẩy động nhỏ nhất và lớn nhất. Tạo một tệp script và viết đoạn mã sau vào đó:

% displaying the smallest and largest single-precision 
% floating point number
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'))

% displaying the smallest and largest double-precision 
% floating point number
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'))

Khi bạn chạy tệp, nó sẽ hiển thị kết quả sau:

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