MATLAB中的数值类型
浮点数
MATLAB® 以双精度或单精度格式表示浮点数。默认为双精度,可以通过一个简单的转换函数将任何数值转换为单精度数值(single())。
浮点数的定义
- 双精度浮点
MATLAB 根据适用于双精度的 IEEE® 754 标准 来构造双精度(即 double)数据类型。以 double 形式存储的任何值都需要 64 位。
位 | 含义 |
63 | 符号(0 = 正号、1 = 负号) |
62 - 52 | 指数,偏置为 1023 |
51 到 0 | 数值 1.f 的小数 f(十进制) |
创建方式:
a = 1.234567
b = double(1.234567) %%模型就是double类型,很MATLAB
- 单精度浮点
MATLAB 根据适用于单精度的 IEEE® 754 标准 来构造单精度(即 single)数据类型。以 single 形式存储的任何值都需要 32位。
位 | 含义 |
31 | 符号(0 = 正号、1 = 负号) |
30 - 23 | 指数,偏置为 127 |
22 到 0 | 数值 1.f 的小数 f(十进制) |
b= single(1.235678);
可以试一下
b= single(1.2356789);
超过了8位有效数字,不能精确表示,精度和表示问题可以参照 IEEE® 754 标准和浮点数的精度。
使用32位的single 类型的数值,与使用 64 位的 double 类型的数值相比,前者需要的内存更少。但是,由于它们是使用较少的位存储的,因此 single 类型的数值所呈现的精度要低于 double 类型的数值。
一般使用双精度来存储大于 3.4 x 1038 或约小于 -3.4 x 1038 的值。对于位于这两个范围之间的数值,可以使用双精度,也可以使用单精度,但单精度需要的内存更少。
浮点数的算术运算
双精度浮点
可以使用 double 和以下的任何其他类来执行基本算术运算。如果一个或多个操作数为整数(标量或数组),则 double 操作数必须为标量。运算结果默认为 double 类型,除非另有说明:
- single - 结果为 single 类型
- double
- int* 或 uint* - 结果与整数操作数具有相同的数据类型
- char
- logical
单精度浮点数
使用 single 和以下的任何其他类来执行基本算术运算。运算结果始终为 single(single不能与整数直接运算):
- single
- double
int* 或 uint* - 结果与整数操作数具有相同的数据类型- char
- logical
整数
MATLAB® 具有四个有符号整数类(int8、int16、int32、int64分别占用字节 1、 2、 4、 8个)和四个无符号整数类(uint8、uint16、uint32、uint64同样占用字节 1、 2、 4、 8个,其中u为unsigned的缩写)。
定义方式:
a = 6;
b = single(a);
%%%%有符号整数
c = int64(a);
d = int32(a);
e = int16(a);
f = int8(a);
%%%%无符号整数
g = uint64(a);
h = uint32(a);
i = uint16(a);
j = uint8(a)
MATLAB 默认情况下以双精度浮点形式 (double) 存储数值数据。要以整数形式存储数据,您需要从 double 转换为所需的整数类型。使用上表中所示的转换函数之一。
例如,如果要以 16 位有符号整数形式存储赋给变量 x 的值 325,请键入
x = int16(325);
如果要转换为整数的数值带有小数部分,MATLAB 将舍入到最接近的整数。如果小数部分正好是 0.5,则 MATLAB 会从两个同样临近的整数中选择绝对值大小更大的整数。
在Matlab中还有几种取整的函数分别是
- floor() :向下取整
- ceil():向上取整
- round():四舍五入,取最近的整数
- fix():向0取整,向原点方向取整
如果将大于某个整数数据类型的最大值的数值转换为该类型,MATLAB 会将其设置为最大值。同样,若小于,MATLAB 会将其设置为最小值。