除double型外的其他数据类型

对于数值变量,MATLAB中提供了多种数据类型。默认时,MATLAB指定数据为double型,表示64位的双精度浮点型。MATLAB用双精度计算操作double型数据。对大部分数值计算任务而言,推荐使用double型。[大谦MATLAB,dqmatlab点com]

除double型外,MATLAB还提供了几种其他的数据类型,它们比double型需要更少的存储空间。包括:

single型——单精度浮点值,32位;

int8和uint8型——有符号和无符号整型,8位;

int16和uint16型——有符号和无符号整型,16位;

int32和uint32型——有符号和无符号整型,32位。

如果需要减小内存消耗,同使用以上介绍的这些数据类型很有用。例如,操作诸如图像之类很大的数据集时就很有用。

整型数据类型

MATLAB中的整型数据类型可以定义一定范围内的整型值。例如,int8型数据可以表示—128~127的任何8位无符号整数。该数据类型在保存只能用整型保存的数据(例如图像数据)时很有用。表2-3列出了各种整型数据类型的数值范围。

表2-3 MATLAB中的整型数据类型及其值的范围

数 据 类 型 描 述 值 的 范 围
int8 有符号8位整数 128~127
uint8 无符号8位整数 0~255
int16 有符号16位整数 215~2151
uint16 无符号16位整数 0~2161
int32 有符号32位整数 231~2311
uint32 无符号32位整数 0~2321

将值或变量指定为整型。

【例2-5】在命令窗口中输入

code.matlab
x=int8(5)

将x的值设置为5,数据类型为int8型。可以用class函数确认变量的数据类型。例如:

code.matlab
class(x)
ans=
int8

当把数值转换为一种整型数据类型时,MATLAB会将结果圆整到最近的整型值。例如:

code.matlab
int8(2.7)
ans=
3

对于小数位为5的情况,如果数值为正,则向上圆整,否则向下圆整。例如:

code.matlab
int8(2.5)
ans=
3
int8(-2.5)
ans=
-3

在将大于整型数据类型最大值的数据转换为该整型时,MATLAB返回最大值。例如:

code.matlab
int8(300)
ans=
127

同样,在转换时,如果数据值小于数据类型的最小值,则返回最小值,通常这被称为饱和溢出。

两个整型数据相加,结果仍为整型。例如:

code.matlab
x=int16(5)+int16(9)
x=
14
class(x)
ans=
int16

单精度浮点型数据类型

单精度浮点型数据类型数据类型即为single型。

【例2-6】下面用single命令将数值或变量指定为single型。在命令窗口中输入

code.matlab
a=single(5)

将a的值设置为5,数据类型设置为single型。

当将数据保存为single型时所需要的内存只占保存为double型时的一半。

可以用whos命令进行比较,例如:

code.matlab
b=5;
whos
Name      	Size          	Bytes    	Class
a         	11          	4        	single
b         	11          	8        	double

当将double型数据转换为single型时,MATLAB将该数据圆整到最近的单精度浮点值。这对数据会有一些小小的改变。例如:

code.matlab
format long
single(3.14)
ans=
3.1400001

函数eps返回浮点数的精度。所谓精度,指的是该浮点数与下一个浮点数之间的差值。例如:

code.matlab
format long
eps(5)
ans=
8.881784197001252e-16

eps(x)的值与x的大小有关,x值越大,eps(x)的值越大。例如:

code.matlab
eps(50)
ans=
7.105427357601002e-15

下面的语句返回单精度浮点数5的精度。

code.matlab
x=single(5)
eps(x)
ans=
4.7683716e-07

注意:这个结果比双精度浮点数5的精度要大一些。这说明在两个相邻数据之间,双精度浮点数的个数比单精度浮点数的个数多一些,即双精度浮点数的精度比单精度浮点数高一些。