首页 > 编程笔记 > MATLAB笔记 阅读:49

MATLAB中的浮点类型(非常详细)

MATLAB 中提供了单精度浮点数类型和双精度浮点数类型,其在存储占用位数、能够表示的数值范围、数值精度各方面均不相同,具体如下表所示。

表:MATLAB中的浮点数类型
浮点数类型 存储占用位数 各数位的意义 数值范围 转换函数
单精度 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

相关文章