matlab数据类型 —— 浮点型

2023-05-07 17:48:55 浏览数 (1)

〇、概述

浮点型:与整型不同,浮点型是指可以有小数点及以后数据部分的数据。1.1312232.31-8321 等处在浮点型范围内数据

Matlab 中提供了两种浮点数类型,单精度浮点型 与 双精度浮点型。两者在存储所占用的位宽,数值的范围等都不同。

  • 单精度浮点型 用英文 single 表示
  • 双精度浮点型 用英文 double 表示

一、单精度浮点型

有符号整型 是一般是指带有正负号的整型。

类型

函数

范围

占用大小

数据位

0~22 位 → 小数部分

单精度浮点型

single

-3.4028e 38 ~ 3.4028e 38

4字节 (32 位)

23~30位 → 指数部分

31位 → 符号位

  • 符号位 0 位为正,1 位为负

二、双精度浮点型

无符号整型 是指没有正负号的整型,也就是只包含 0 和 正数 的整数。

类型

函数

范围

占用大小

数据位

0~51 位 → 小数部分

双精度浮点型

double

-1.7977e 308 ~ 1.7977e 308

8字节 (64 位)

52~62位 → 指数部分

63位 → 符号位

  • 符号位 0 位为正,1 位为负

三、浮点型的最小值与最小值

在 matlab 中,可以使用 realmax() 函数 和 realmin() 函数 来查看浮点型的最大正数以及最小正数。

  • realmax():返回指定浮点数类型所能表示的正的最大值。
  • realmin():返回指定浮点数类型所能表示的正的最小值。
  • 注意:这两个函数只对浮点型有效,对其它类型无效

例1. 查看双精度浮点型以及单精度浮点型的最大正值和最小正值

代码语言:javascript复制
>> realmax('double')  %查看双精度浮点型的最大正值

ans =

  1.7977e 308

>>
>> realmin('double')  %查看双精度浮点型的最小正值

ans =

  2.2251e-308

>>
>> realmax('single')  %查看单精度浮点型的最大正值

ans =

  single

  3.4028e 38

>>
>> realmin('single')  %查看单精度浮点型的最小正值

ans =

  single

  1.1755e-38

四、浮点型创建

由于 Matlab 中数值的默认存储类型是 双精度浮点型,对于使用双精度浮点型的情况下可以不用强制转换,直接使用即可。

但在某些情况下,使用单精度浮点型能够能够表现出更好的性能(单精度浮点型所占用的存储空间比较小,因此对于内存的占用也比较小)这时候就需要使用强制转换来将其变成双精度浮点型。

例2. 将数据转换成浮点型

代码语言:javascript复制
>> x=100  %不用强转赋值double型给x

x =

   100

>>
>> y=double(100)  %使用强转赋值double型给y

y =

   100

>>
>> z=single(100)  %使用强转赋值single型给z

z =

  single

   100

>>
>> whos
  Name      Size            Bytes  Class     Attributes

  ans       1x1                 4  single              
  x         1x1                 8  double              
  y         1x1                 8  double              
  z         1x1                 4  single              
  • x=100x=double(100) 含义相同,都是赋值双精度浮点型100给x。

四、浮点型参与的运算

这里如果你有其它语言的学习背景的话,这里的浮点型的运算也是建议牢牢记住浮点型参与的运算的一些注意事项。

1. 运算中的注意事项

  • 双精度浮点型整型 做数学运算结果仍是 整型 (上一节说的)
  • 双精度浮点型单精度浮点型 做数学运算结果是 单精度浮点型
  • 双精度浮点型字符型逻辑型 做运算结果是 双精度浮点型
  • 单精度浮点型整型 不能做数学运算 (上一节说的)
  • 单精度浮点型字符型逻辑型 以及 任何浮点型 做运算都是 单精度浮点型。

例3. 浮点型参与的运算

代码语言:javascript复制
>> a=double(10)*int8(10)  %双精度浮点型与整型做数学运算

a =

  int8

   100

>>
>> b=double(10)*single(10)  %双精度浮点型与单精度浮点型做数学运算

b =

  single

   100

>>
>> c=double(10)*'a'  %双精度浮点型与字符型做数学运算

c =

   970

>>
>> d=double(10)*false  %双精度浮点型与逻辑型做运算

d =

     0
代码语言:javascript复制
>> e=single(10)*int32(10)  %单精度浮点型与整型做数学运算

错误使用  * 
整数只能与同类的整数或双精度标量值组合使用。

>>
>> f=single(10)*'a'  %单精度浮点型与字符型做运算

f =

  single

   970

>>
>> g=single(10)*false  %单精度浮点型与逻辑型做运算

g =

  single

     0
代码语言:javascript复制
>> whos
  Name      Size            Bytes  Class     Attributes

  a         1x1                 1  int8                
  ans       1x1                 4  single              
  b         1x1                 4  single              
  c         1x1                 8  double              
  d         1x1                 8  double              
  f         1x1                 4  single              

0 人点赞