对于数值变量,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】在命令窗口中输入
x=int8(5)
将x的值设置为5,数据类型为int8型。可以用class函数确认变量的数据类型。例如:
class(x)
ans=
int8
当把数值转换为一种整型数据类型时,MATLAB会将结果圆整到最近的整型值。例如:
int8(2.7)
ans=
3
对于小数位为5的情况,如果数值为正,则向上圆整,否则向下圆整。例如:
int8(2.5)
ans=
3
int8(-2.5)
ans=
-3
在将大于整型数据类型最大值的数据转换为该整型时,MATLAB返回最大值。例如:
int8(300)
ans=
127
同样,在转换时,如果数据值小于数据类型的最小值,则返回最小值,通常这被称为饱和溢出。
两个整型数据相加,结果仍为整型。例如:
x=int16(5)+int16(9)
x=
14
class(x)
ans=
int16
单精度浮点型数据类型
单精度浮点型数据类型数据类型即为single型。
【例2-6】下面用single命令将数值或变量指定为single型。在命令窗口中输入
a=single(5)
将a的值设置为5,数据类型设置为single型。
当将数据保存为single型时所需要的内存只占保存为double型时的一半。
可以用whos命令进行比较,例如:
b=5;
whos
Name Size Bytes Class
a 11 4 single
b 11 8 double
当将double型数据转换为single型时,MATLAB将该数据圆整到最近的单精度浮点值。这对数据会有一些小小的改变。例如:
format long
single(3.14)
ans=
3.1400001
函数eps返回浮点数的精度。所谓精度,指的是该浮点数与下一个浮点数之间的差值。例如:
format long
eps(5)
ans=
8.881784197001252e-16
eps(x)的值与x的大小有关,x值越大,eps(x)的值越大。例如:
eps(50)
ans=
7.105427357601002e-15
下面的语句返回单精度浮点数5的精度。
x=single(5)
eps(x)
ans=
4.7683716e-07
注意:这个结果比双精度浮点数5的精度要大一些。这说明在两个相邻数据之间,双精度浮点数的个数比单精度浮点数的个数多一些,即双精度浮点数的精度比单精度浮点数高一些。