【matlab】数据类型01-数值型变量(整数、浮点数、复数、二进制和十六进制)

文章目录

  • 一、 整数
    • 1.1 整数的最值
    • 1.2 大整数
    • 1.3 当整数值超过了uint64最大值
    • 1.4 和其它类型数值运算
  • 二、 浮点数
    • 2.1 双精度和单精度
    • 2.2 浮点数的存储
    • 2.3 浮点数的最值
    • 2.4 浮点数的“四舍五入”
    • 2.5 浮点数的算术运算
    • 2.6 意外:舍入误差、抵消、淹没和中间转换
  • 三、复数
  • 四、二进制和十六进制
  • 五、其它
    • 5.1 无穷和NaN
    • 5.2 数值显示格式
    • 5.3 检查数据类型
    • 5.4 合并不同类型

也可以看matlab官方doc。

matlab 所有的数据类型都以矩阵(数据)的形式组织,比如单变量就是1*1的矩阵。

Matlab = Matrix Laboratory

在这里插入图片描述

一、 整数

MATLAB® 具有四个有符号整数类和四个无符号整数类。

有符号类型使您能够处理负整数以及正整数,但表示的数字范围不如无符号类型广泛,因为有一个位用于指定数字的正号或负号。

无符号类型提供了更广泛的数字范围,但这些数字只能为零或正数。

MATLAB 支持以 1 字节(8位)、2 字节、4 字节和 8 字节(32位)几种形式存储整数数据。

使用可容纳你的数据的最小整数类型来存储数据,则可以节省程序内存和执行时间。例如,不需要使用 32 位整数来存储值 100。

下面列出了八个整数类、使用每种类型可存储的值范围以及创建该类型所需的 MATLAB 转换函数。

值的范围转换函数十进制范围
有符号 8 位整数–2^7 到 2^7–1int8–128 到 127
有符号 16 位整数–2^15 到 2^15–1int16–32,768 到 32,767
有符号 32 位整数–2^31 到 2^31–1int32–2,147,483,648 到 2,147,483,647
有符号 64 位整数–2^63 到 2^63–1int64–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
无符号 8 位整数0 到 2^8–1uint80 到 255
无符号 16 位整数0 到 2^16–1uint160 到 65,535
无符号 32 位整数0 到 2^32–1uint320 到 4,294,967,295
无符号 64 位整数0 到 2^64–1uint640 到 18,446,744,073,709,551,615

MATLAB 默认情况下以双精度浮点形式 (double) 存储数值数据。

下面的 f 看似赋值为整数,实则自带存储为一个浮点数。

在这里插入图片描述


1.1 整数的最值

intmax('int8')
intmin('int8')

输出:

ans = 127
ans = -128            

如果您将大于某个整数数据类型的最大值的数值转换为该类型,MATLAB 会将其设置为最大值。同样,如果您转换小于该整数数据类型的最小值的数值,MATLAB 会将其设置为最小值。

如:

y = int8(200)
x = int8(100)*3

的值都是127

1.2 大整数

大于flintmax (9.0072e+15)的整数

>> flintmaxans =9.0072e+15

这个值还没有int64的最大值大:9.2234e+18,更没有uint64最大值大:1.8447e+19

当创建由大整数(大于 flintmax)的数值组成的数组时,默认情况下,MATLAB 最初将输入表示为双精度值。当你将此输入转换为 int64 或 uint64 数据类型时,可能出现精度损失。为了保持精度,请改为对数组的每个标量元素调用 int64 或 uint64。

比如:

flintmaxX = int64([-12345678901234567 12345678901234567])Y = [int64(-12345678901234567) int64(12345678901234567)]

R2019b 开始,还可以使用整数的十六进制或二进制值创建整数数组而不会损失精度(注意十六进制的后缀加了s64,表示有符号64位整数,后面会讲)。

Z = [0xFFD423ABA294B479s64 0x2BDC545D6B4B87s64]

在这里插入图片描述

1.3 当整数值超过了uint64最大值

uint64可以表示的最大整数是:18446744073709551615,约为 1.8 ∗ 1 0 19 1.8*10^{19} 1.81019

大于这个值只能转换为浮点数吗?

转换为double类型,虽然可以表达的最大值变大了非常多,但是精度会丢失(小数位数有限),当然这么大的整数可能只在乎数量级了。这里仅作理论讨论。

🟢几种处理方式:

  • (1)使用字符串或者字符数组;
  • (2)使用第三方高精度数学库;
  • (3)将其分隔为多个部分,再使用uint8等存储;
  • (4)使用符号计算Symbolic Math Toolbox
  • (5)使用十六进制或者二进制。

字符串和十六进制应该是最容易想到的,不过我们几乎不会遇到处理这种整数的情况。

1.4 和其它类型数值运算

🟢整数只能和同类型的整数进行运算,int8和int16这样无法进行运算。

🟢 int类型数据与其他类型数据运算后,结果与 int 类型一致,且受对应的int类型大小范围限制。

x = int16(100)*double(3)y = double(3)*int8(100)z = int8(1)*'a'

输出:

x = 300
y = 127
z = 97

即不会将结果转为更高精度的浮点数。


二、 浮点数

2.1 双精度和单精度

“浮点”指一组对实数进行编码的数据类型,包括分数和小数。浮点数据类型允许小数点后有不同位数,而定点数据类型在小数点前后则保留特定位数。因此与定点数据类型相比,浮点数据类型可以表示更广范围的数值。

由于计算机在数字表示和存储方面的内存有限,只能表示有限精度的浮点数有限集合。这种有限精度无法精确表示某些数值,因而会限制需要精确值或高精度的浮点计算的准确度。尽管浮点数有其局限性,但其计算速度快且精度和范围足以求解现实世界的很多问题,因此得到广泛使用。

MATLAB® 以双精度或单精度格式表示浮点数。

默认为双精度,但你可以通过一个简单的转换函数将任何数值转换为单精度数值。

(1)创建双精度数据
由于 MATLAB 的默认数值类型是 double 类型,因此可以用简单的赋值语句创建双精度浮点数。

x = 122

可以使用 double 函数将数值数据、字符或字符串以及逻辑数据转换为双精度值。例如,将有符号整数转换为双精度浮点数。

x = int8(120);
y = double(x)

(2)创建单精度数据

使用 single 函数创建单精度数值。

x = single(25.783);

2.2 浮点数的存储

默认情况下,MATLAB 根据 IEEE754 格式构造其 double 和 single 浮点数据类型,并遵循就近舍入,偶数优先舍入模式。

数据以二进制形式存储于计算机。

浮点数 x x x的二进制存储形式如下:
x = − 1 s ⋅ ( 1 + f ) ⋅ 2 e x=-1^s\cdot(1+f)\cdot2^e x=1s(1+f)2e

其中:

  • s 确定符号。
  • f 是满足 0 ≤f< 1 的小数(或尾数)。
  • e 是指数。

sfe 分别由内存中有限数量的位确定,其中 fe 取决于数据类型的精度。

在这里插入图片描述

存储 double 数需要 64 位,如下表所示。

宽度用法
631存储符号,其中 0 表示正值,1 表示负值,s
625211存储指数,偏移量为 1023 ,e
51052存储尾数 ,f

存储 single 数需要 32 位,如下表所示。

宽度用法
311存储符号,其中 0 表示正值,1 表示负值
30238存储指数,偏移量为 127
22023存储尾数

🟢 浮点数能表示的最大数量级:

用11个二进制位表示指数,则指数最大值为: 2 11 − 1 = 2047 2^{11}-1=2047 2111=2047
偏移量是1023,则最大指数为:2047 - 1023 = 1024,对应的数量级就是 2 1024 2^{1024} 21024 1 0 308 10^{308} 10308,负数则是 1 0 − 308 10^{-308} 10308

🟢浮点数能保存的十进制的最多有效位数:

以双精度为例:52位(二进制)表示尾数,一个2进制能表示的十进制数的位数是 l o g 10 2 log_{10}2 log102:。二进制形式存储尾数时候,最高位默认位1,53个二进制位能表示的十进制数的位数是:
53 ∗ l o g 10 2 ≈ 15.96 53*log_{10}2 \approx15.96 53log10215.96

所以double类型存储数据的有效位数是15到16位(如果是一个整数则是最大为2^53,即flinrmax)。

同理single最多可以精确存储6到7位有效数字。

超过有效位数的时候,超过的部分就可能丢失精度。

在这里插入图片描述

即,double使用64个二进制位存储十进制数,这64个二进制位只有52个二进制位来存储尾数,对应十进制的15到16位有效数字

🟠 浮点数的大小比较问题:

主要是小数部分,小数转为二进制有时候是无限循环的,但是一个double最多使用52位来存储小数部分对应的二进制,有限的二进制位就不能精确表示这个小数,只是无限精确。即使精确到99.99999999999%也不是等于。

比如 0.1+0.2 和 0.3 是不相等的。因为0.1和0.2对应的52位(尾数)二进制相加后和0.3的二进制不同:

在这里插入图片描述

转换 0.1 为二进制

  1. 0.1 * 2 = 0.2 → 整数部分是 0,记录下来,剩余部分是 0.2。
  2. 0.2 * 2 = 0.4 → 整数部分是 0,记录下来,剩余部分是 0.4。
  3. 0.4 * 2 = 0.8 → 整数部分是 0,记录下来,剩余部分是 0.8。
  4. 0.8 * 2 = 1.6 → 整数部分是 1,记录下来,剩余部分是 0.6。
  5. 0.6 * 2 = 1.2 → 整数部分是 1,记录下来,剩余部分是 0.2。
  6. 0.2 * 2 = 0.4 → 整数部分是 0,记录下来,剩余部分是 0.4。

可以看到,0.1 的小数部分开始循环重复(0.1 = 0.00011001100110011...),这是一个无限循环的二进制小数。

浮点数运算后,可以使用如下方式比较2个运算结果:

x+y-0.3<eps

eps表示浮点相对精度,即2个距离最近的(双精度)浮点数之间的距离。d = eps("single")则为2个距离最近的single之间的距离。

>> epsans =2.2204e-16

2.3 浮点数的最值

double_max = realmax('double')
double_min = realmin('double')single_max = realmax('single')
single_min = realmin('single')

在这里插入图片描述

double_max = 1.7977e+308表示 1.797 ∗ 1 0 308 1.797*10^{308} 1.79710308。这个数是极大的,是太阳质量的数量级的10多倍。

超过这个范围的数记为Inf,-Inf

2.4 浮点数的“四舍五入”

❄️ (1)直接使用int8等转换函数转换为整数类型,规则是,小数部分四舍五入;

❄️ (2)round函数:支持多种转换方案

  • a. 小数部分四舍五入,结果为double类型:round(x)

  • b. 四舍五入到 N 位数(N可用为正负、零,从小数点向两边数起):Y = round(X,N)

  • c. 指定四舍五入类型:Y = round(X,N,type)
    type的取值有"decimals" (默认) | "significant",前者指定保留的小数位数,等同于:Y = round(X,N)
    若使用第二个参数,四舍五入到具有 N 个有效位数的最近数值:

num = 1234.456
num_round_2 = round(num,2,'significant')
num_round_3 = round(num,3,'significant')

输出分别是12001230

  • d.指定处理方向,结值处理方向,指定为以下值之一:
Y = round(___,TieBreaker=direction)

“fromzero” - 将结值朝偏离零的方向舍入到模更大的最接近的整数。

“tozero” - 将结值朝零方向舍入到模更小的最接近的整数。

“even” - 将结值舍入到最接近的偶数。

“odd” - 将结值舍入到最接近的奇数。

“plusinf” - 将结值朝正无穷大方向舍入到更大的最接近的整数。

“minusinf” - 将结值朝负无穷大方向舍入到更小的最接近的整数。

例:

num = 1.5
num_round_1 = round(num,'TieBreaker','fromzero') % 输出是2
num_round_2 = round(num,'TieBreaker','tozero')   % 输出是1

上面2个参数主要是针对小数等于0.5的情况。而,num = 1.2,结果均为1,num=1.7,结果均为2。

推荐使用round进行正常四舍五入,带方向的可以使用下列函数:

❄️ (3)floor(X)函数:将 X 的每个元素四舍五入到小于或等于该元素的最接近整数。
❄️ (4)ceil(X)函数:将 X 的每个元素四舍五入到大于或等于该元素的最接近整数。
❄️ (5)fix(X) 函数:将 X 的每个元素朝零方向四舍五入为最近的整数。此操作实际上是通过删除 X 中每个数的小数部分,将它们截断为整数:

在这里插入图片描述

2.5 浮点数的算术运算

就几条规则:

  1. double类型可用和任意类型进行运算。常见:single、double、char、logic、任意int类型
    • 和single运算的结果是single;
    • 和整数运算结果为对应的整数类型,且结果受到对应整数类型的最值限制;
    • 其它结果都为double类型。
  2. single类型只能和以下类型运算:single、double、char、logic(即不能和整数运算)。结果都为single

2.6 意外:舍入误差、抵消、淹没和中间转换

之前已经说过了,浮点数可能需要无限个二进制位来精确存储,但这不现实,实际上只能用64位来存储一个浮点数,所以会导致一些不准确或者意料之外的结果。

意外的结果并非 MATLAB 中的 Bug,任何使用浮点数的软件都会出现这种情况。如果需要数值的精确有理表示形式,请考虑使用 Symbolic Math Toolbox™

(1)舍入误差:

浮点数的有限精度表示可能导致舍入误差。例如 π \pi π

>> sin(pi)ans =1.2246e-16

当对浮点数执行许多运算时,误差会不断累积和复合,舍入误差最为显著。最佳做法是尽可能减少运算次数。

(2)抵消:根据 eps 的测量,从数量级大致相同的一个数中减去另一个数时,可能发生抵消。

(3)淹没:对数量级相差特别大的浮点数执行运算时,可能发生淹没。

(3)中间转换:使用不同数据类型执行算术时,中间计算和转换可能会产生意外的结果。

在这里插入图片描述

三、复数

复数由两个单独的部分组成:实部和虚部。

基本虚数单位等于 -1 的平方根。这在 MATLAB® 中通过以下两个字母之一表示:i 或 j

直接创建:

x = 2 + 3i;

使用complex函数创建:z = complex(a,b) 通过两个实数输入创建一个复数输出 z:z = a + bi

  • 获取实部:real(z)
  • 获取虚部:imag(z)

实部和虚部的要求:

  • 同为一种类型的整数
  • 同为浮点数(double+single混用结果实部和虚部都为single)

数乘复数要求一样的,数要和复数的实部和虚部类型一致,实部和虚部都会同时进行相同的运算。

在这里插入图片描述

四、二进制和十六进制

在 MATLAB® 中,有两种方式来表示十六进制和二进制值:

  • 作为字面值。从 R2019b 开始,您可以使用适当的前缀作为表示法,将十六进制和二进制值写成字面值。例如,字面值 0x2A 指定 42,MATLAB 会将其存储为数字而不是文本。

  • 作为字符串或字符向量。例如,字符向量 ‘2A’ 将数字 42 表示为十六进制值。当您使用文本表示十六进制或二进制值时,请用引号将它括起来。MATLAB 将这种表示存储为文本,而不是数字。

MATLAB 中的一些函数可用于将数字与其十六进制及二进制表示相互转换。

五、其它

5.1 无穷和NaN

5.2 数值显示格式

5.3 检查数据类型

5.4 合并不同类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/16828.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Tessy学习笔记—requirement(需求)的管理

1&#xff1a;什么是需求 Tessy中的requirement&#xff08;需求&#xff09;是&#xff0c;我们还是跟着Tessy官方的文档&#xff0c;继续学习&#xff0c;打开官方自带的工程Is Value In Range Requirement.project。 按照官方自带的操作手册&#xff0c;导入txt类型的需求…

关于10款PDF编辑工具我的使用体验!!!!!

如今&#xff0c;pdf的使用已经见怪不怪。在我们的工作、学习和生活中都已经离不开PDF文档了。那我么&#xff0c;随之而来的问题也就是我们经常需要对PDF文件进行编辑。市面上已经出现了许多PDF编辑软件。下面&#xff0c;我将与大家分享一下这几款PDF编辑器的个人使用经历。 …

unity小:shaderGraph不规则涟漪、波纹效果

实现概述 在本项目中&#xff0c;我们通过结合 Sine、Polar Coordinates 和 Time 节点&#xff0c;实现了动态波纹效果。以下是实现细节&#xff1a; 核心实现 Sine 波形生成&#xff1a; 使用 Sine 节点生成基本的波形。该节点能够创建周期性变化&#xff0c;为波纹效果提供…

针对gitgitee的使用

1.下载git 链接 打开终端&#xff0c;桌面鼠标右键 2.配置密钥 登录gitee。 设置密钥 查看官方文档 跟着教程 复制最后的输出进行密钥添加 验证是否添加成功 3.创建&连接远程仓库 创建仓库 git终端进行配置 远程仓库克隆到本地 桌面终端clone,克隆他人|自己的仓库到本地…

基于yolov8、yolov5的玉米病害检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 &#xff0c; 直接提供最少两个训练好的模型。模型十分重要&#xff0c;因为有些同学的电脑没有 GPU&#xff0…

省级生活垃圾无害化处理率面板数据(2004-2022年)

生活垃圾无害化处理率是指经过处理的生活垃圾中&#xff0c;达到无害化标准的垃圾所占的比例。这一指标的提高&#xff0c;意味着城市在垃圾处理方面的能力增强&#xff0c;能够有效减少环境污染&#xff0c;提升居民生活质量&#xff0c;同时也是城市可持续发展的重要保障。 …

NTIRE2024 | 修复一切图像RAIM: Restore All Image Model Challenge报告分析

论文/报告地址&#xff1a;NTIRE 2024 Restore Any Image Model (RAIM) in the Wild Challenge 0、写在前面 马上CVPR2024就要开幕&#xff0c;各大挑战赛的排名和详细报告也都出炉。近期留意到这个名字很屌的赛道&#xff0c;修复一切图像的模型&#xff0c;小米的团队的拿了…

【Visual Studio】设置文件目录

打开属性 输出目录&#xff1a;$(SolutionDir)bin\$(Platform)\$(Cinfiguration)\ 中间目录&#xff1a;$(SolutionDir)bin\intermediates\$(Platform)\$(Cinfiguration)\

基于Java的校园菜鸟驿站管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

Photoshop(PS)——人像磨皮

1.新建一个文件&#xff0c;背景为白色&#xff0c;将图片素材放入文件中 2.利用CtrlJ 复制两个图层出来&#xff0c;选择第一个拷贝图层&#xff0c;选择滤镜---杂色---蒙尘与划痕 3.调整一下数值&#xff0c;大概能够模糊痘印痘坑&#xff0c;点击确定。 4.然后选择拷贝2图层…

Yocto - 使用Yocto开发嵌入式Linux系统_13 创建定制层

Creating Custom Layers 除了使用社区或供应商提供的现有图层外&#xff0c;我们还将在本章中学习如何为我们的产品创建图层。此外&#xff0c;我们还将了解如何创建机器定义和分布&#xff0c;并从中获益&#xff0c;从而更好地组织我们的源代码。 In addition to using exist…

第5章-总体设计 5.2 需求转化为规格

5.2 需求转化为规格 1.框式产品&#xff08;1&#xff09;业务规格&#xff0c;这需要满足客户期望、有市场竞争力、颗粒度最合理。&#xff08;2&#xff09;整框规格&#xff0c;包括电源、功耗、散热、可靠性的规格&#xff0c;要保证整款满足环境应用要求。&#xff08;3&a…

kali上安装docker,并且生成centos7容器和创建apache容器后台运行

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明

4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明 文章目录 4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明前言1. Ribbon 介绍1.1 LB(Load Balance 负载均衡) 2. Ribbon 原理2.2 Ribbon 机制 3. Spring Cloud Ribbon 实现负载均衡算法-应用实例4. 总结&#x…

约克VRF中央空调新天氟地水/天氟热水,做冬日生活的温暖守护者

随着冬季的悄然降临,现代人对居家环境的舒适性要求愈发提升,如何在寒冷的季节里营造一个温暖、静谧且健康的居住空间,成为了时下关注的焦点。面对冬日空气干燥、寒气侵袭的挑战,约克VRF中央空调凭借其氟系统和水系统的跨界融合,为家庭带来了纵享四季的恣意体验,让温暖与舒适触手…

计算机提示mfc140u.dll丢失的五种解决方法,了解mfc140u.dll错误的几种修复方法

当你尝试打开某些程序时&#xff0c;突然出现错误提示&#xff0c;告知你系统缺少 mfc140u.dll 文件&#xff0c;这可能让你感到困惑和无助。mfc140u.dll 是 Microsoft Foundation Class (MFC) 库的一部分&#xff0c;对于运行很多由 Visual Studio 2015 使用 MFC 开发的应用程…

【SSL-RL】自监督强化学习: 好奇心驱动探索 (CDE)算法

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…

Windows系统 ElasticSearch,Kibana安装

目录 1.wins安装ElasticSearch2.将 elasticsearch 以服务的方式安装3. 在系统环境变量 Path 中添加如下路径4.启动点击即可5.双击 elasticsearch.bat 启动 elasticsearch 服务6.启动后第一次会显示一些配置信息,包括默认的用户密码 先记住 记不住的话可以重置密码7.验证安装结果…

《Probing the 3D Awareness of Visual Foundation Models》论文解析——单图像表面重建

一、论文简介 论文讨论了大规模预训练产生的视觉基础模型在处理任意图像时的强大能力&#xff0c;这些模型不仅能够完成训练任务&#xff0c;其中间表示还对其他视觉任务&#xff08;如检测和分割&#xff09;有用。研究者们提出了一个问题&#xff1a;这些模型是否能够表示物体…

P3-4.【结构化程序设计】第四节——知识要点:break、continue和goto辅助循环设计语句

知识要点&#xff1a;break、continue和goto辅助循环设计语句 视频&#xff1a; P3-4.1.【结构化程序设计】第四节——知识要点&#xff1a;break、continue和goto辅助循环设计语句 P3-4.2.【结构化程序设计】第四节——知识要点&#xff1a;break、continue和goto辅助循环设计…