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

MATLAB double和single类型的用法(附带实例)

MATLAB 提供了单精度浮点数类型和双精度浮点数类型,它们在存储位宽、各数据位的用途、表示的数值范围、转换函数等方面有所不同,如下表所示。

表 1 MATLAB中单精度浮点数类型和双精度浮点数类型的比较
浮点数类型 存储位宽 各数据位的用途 数值范围 转换函数
双精度 64 位 0~51 位表示小数部分
52~62 位表示指数部分
63 位表示符号(0 为正,1 为负)
−1.79769e+308~2.22507e−308
2.22507e−308~1.79769e+308
double
单精度 32 位 0~22 位表示小数部分
23~30 位表示指数部分
31 位表示符号(0 为正,1 为负)
−3.40282e+038~−1.17549e−038
−1.17549e−038~3.40282e+038
single

从表中可以看出,单精度浮点数类型存储所用的位数少,因此占用内存小,但从各数据位的用途来看,单精度浮点数能够表示的数值范围和数值精度都比双精度浮点数小。

创建浮点数类型也可以通过转换函数来实现,MATLAB 中默认的数值类型是双精度浮点数类型。

【实例】浮点数类型转换函数的应用。在命令行窗口中输入以下语句,并查看输出结果。
>> x = 3.4
x =
    3.4000
>> y = single(x)           % 把 double 型变量强制转换为 single 型
y =
  single
    3.4000
>> c = uint32(65758);       % 定义一个 uint32 型变量 c
>> cc = double(c)           % 将 uint32 型变量 c 强制转换为 double 型
cc =
    65758
>> whos
  Name      Size            Bytes  Class     Attributes
  c         1x1                 4  uint32             
  cc        1x1                 8  double             
  x         1x1                 8  double             
  y         1x1                 4  single             
在涉及双精度浮点数的运算中,返回值的类型依赖于参与运算的其他数据类型。双精度浮点数与逻辑型、字符型数据进行运算时,返回结果为双精度浮点数类型;与整数型数据进行运算时,返回结果为相应的整数类型;与单精度浮点型数据进行运算时,返回结果为单精度浮点数类型。

单精度浮点数与逻辑型、字符型数据及其他类型浮点数进行运算时,返回结果都为单精度浮点数类型。

注意,单精度浮点数不能和整数类型数据进行算术运算。

【实例】浮点数参与的运算。在命令行窗口中输入以下语句,并查看输出结果。
>> clear                           % 清除存储空间中的变量
>> a = uint32(282);               % 定义一个 uint32 型变量 a
>> y = single(53.756);            % 定义一个 single 型变量 y
>> z = 53.751;                    % 定义一个 double 型变量 z
>> ay = a * y
错误使用 *
整数只能与同类的整数或双精度标量值组合使用。
>> az = a * z                     % 将 uint32 型变量 a 与 double 型变量 z 相乘
az =
  uint32
   15158
>> whos
  Name      Size            Bytes  Class     Attributes
  a         1x1                 4  uint32             
  az        1x1                 4  uint32             
  y         1x1                 4  single             
  z         1x1                 8  double             
从表 1 可以看出,浮点数只占用一定的存储位宽,其中只有有限位分别用来存储指数部分和小数部分。因此,浮点数类型能表示的实际数值是有限的,而且是离散的。

任何两个接近的浮点数之间都有一个很微小的间隙(或间隔),而所有处在这个间隙中的值都只能用这两个浮点数中的一个来表示。

MATLAB 提供了浮点相对精度 eps 函数,通过该函数可以获取一个数值和它最接近的浮点数之间的间隙大小。

相关文章