MATLAB中的浮点类型(非常详细)
MATLAB 中提供了单精度浮点数类型和双精度浮点数类型,其在存储占用位数、能够表示的数值范围、数值精度各方面均不相同,具体如下表所示。
由表可知,单精度浮点数类型的占用位数少,因此占用内存小,但能够表示的数值范围和数值精度都比双精度浮点数类型的小(低)。
由于 MATLAB 中的默认数值类型为双精度浮点数类型,因此与创建整数类型数值一样,也可以通过转换函数来实现单精度浮点数类型数值的创建。
双精度浮点数在参与运算时,返回值的类型依赖于参与运算的其他数据的类型:
在 MATLAB 中,单精度浮点数类型不能与整数类型进行算术运算。
【实例】浮点数参与的运算。在命令行窗口中输入:
继续在命令行窗口中输入:
继续在命令行窗口中输入:
继续在命令行窗口中输入:
继续在命令行窗口中输入:
MATLAB 中提供了 eps() 函数,可以获取一个数值和最接近该数值的浮点数之间的间隙。
【实例】浮点数的精度。在命令行窗口中依次输入:
继续在命令行窗口中输入:
浮点数类型 | 存储占用位数 | 各数位的意义 | 数值范围 | 转换函数 |
---|---|---|---|---|
单精度 | 32 |
0~22 位表示小数部分 23~30 位表示指数部分 31 位表示符号(0 表示正,1 表示负) |
-3.40282e+038~-1.17549e-038 1.17549e-038~3.40282e+038 |
single |
双精度 | 64 |
0~51 位表示小数部分 52~62 位表示指数部分 63 位表示符号(0 表示正,1 表示负) |
-1.79769e+308~-2.22507e-308 2.22507e-308~1.79769e+308 |
double |
由表可知,单精度浮点数类型的占用位数少,因此占用内存小,但能够表示的数值范围和数值精度都比双精度浮点数类型的小(低)。
由于 MATLAB 中的默认数值类型为双精度浮点数类型,因此与创建整数类型数值一样,也可以通过转换函数来实现单精度浮点数类型数值的创建。
双精度浮点数在参与运算时,返回值的类型依赖于参与运算的其他数据的类型:
- 当参与运算的其他数据为逻辑型、字符型时,返回值为双精度浮点数类型;
- 当参与运算的其他数据为整数类型时,返回值为相应的整数类型;
- 当参与运算的其他数据为单精度浮点数类型时,返回值为相应的单精度浮点数类型。
在 MATLAB 中,单精度浮点数类型不能与整数类型进行算术运算。
【实例】浮点数参与的运算。在命令行窗口中输入:
>> a = uint32(120); % 创建一个无符号 32 位整数变量 a,并给它赋值 120 >> b = single(22.809); % 创建一个单精度浮点数变量 b,并给它赋值 22.809 >> c = 73.226; % 创建一个双精度浮点数变量 c,并给它赋值 73.226 >> ab = a * b % 计算 a 和 b 的乘积输出结果:
错误使用 *
整数只能与同类的整数或双精度标量值组合使用。
继续在命令行窗口中输入:
>> ac = a * c % 计算 a 和 c 的乘积输出结果:
ac = uint32 8787
继续在命令行窗口中输入:
>> bc = b * c % 计算 b 和 c 的乘积输出结果为:
bc = single 1.6702e+003
继续在命令行窗口中输入:
>> str = 'hello' % 创建一个名为 str 的变量,并将其赋值为字符串 'hello'输出结果:
str = 'hello'
继续在命令行窗口中输入:
>> newstr = str - 44.3 % 从字符串 str 中减去一个浮点数 44.3,赋值给新变量 newstr输出结果:
newstr = 59.7000 56.7000 63.7000 63.7000 66.7000
在命令行窗口中输入:此处仅对字符串中每个字符的 ASCII 值进行操作,并无实际含义。
>> whos % 显示当前工作空间中所有变量的详细信息,包括变量名、大小、所占字节数、数据类型输出结果为:
Name Size Bytes Class Attributes a 1x1 4 uint32 ac 1x1 4 uint32 b 1x1 4 single bc 1x1 4 single c 1x1 8 double newstr 1x5 40 double str 1x5 10 char由于浮点数只占用一定的存储位数,其中只有有限位分别用来存储指数部分和小数部分,因此,浮点数类型能够表示的实际数值是有限且离散的,任何两个相邻的浮点数之间都有微小间隙,而处在间隙中的数值只能用这两个相邻的浮点数中的一个来表示。
MATLAB 中提供了 eps() 函数,可以获取一个数值和最接近该数值的浮点数之间的间隙。
【实例】浮点数的精度。在命令行窗口中依次输入:
>> format long % 设置输出显示为长浮点数格式 >> eps(3) % 返回从 3 到下一个较大双精度浮点数的间隙输出结果为:
ans = 4.4408e-016
继续在命令行窗口中输入:
>> eps(single(3)) % 从 3 的单精度浮点数表示形式到下一个更大的单精度浮点数的间隙输出结果为:
ans = single 2.3841858e-007