自学笔记十四:Matlab浮点型:创建和转换、取值范围、运算和精度问题
1.浮点型的概念
浮点型分为单精度(single)浮点型和双精度(double)浮点型;
IEEE浮点数算术标准(IEEE 754)是IEEE二进位浮点数算术标准(IEEE Standard for Floating-Point Arithmetic)的标准编号,等同于国际标准ISO/IEC/IEEE 60559。该标准由美国电气电子工程师学会(IEEE)计算机学会旗下的微处理器标准委员会(Microprocessor Standards Committee, MSC)发布,是最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。
这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number),一些特殊数值(无穷与非数值(NaN)),以及这些数值的“浮点数运算子”,它也指明了四种数值修约规则和五种例外状况(包括例外发生的时机与处理方式)。
2.计算机存储和表达
任何存储为double格式的值都需要64位,格式如下:
位 |
用法 |
|
符号( |
|
指数 |
|
小数位(分数位) |
任何存储为single格式的值都需要32位,格式如下:
位 |
用法 |
|
|
|
指数 |
|
小数位(分数位) |
3.创建方法
创建双精度浮点数使用double函数,创建单精度浮点数使用单精度single函数;
程序示例:
double(1) %创建双精度浮点型1
a=1 %默认双精度浮点型,再赋值给a
single(1) %单精度1
4.浮点型的取值范围
测试浮点型数据的取值范围最大值和最小值分别使用realmax和realmin函数;
程序示例:
realmax('double') %双精度最大取值范围
[-realmax,-realmin,realmin,realmax] %完整的双精度取值范围(-0和0之间取不到任何值)
[-realmax('single'),-realmin('single'),realmin('single'),realmax('single')]
%单精度浮点型取值范围,上式未指定则默认取双精度浮点型范围
5.判断数据类型
判断是否为浮点型使用isfloat函数,测试一个变量的数据类型使用class函数;
程序示例:
a=1
isfloat(a) %判断是否浮点型
class(a) %测试变量a的数据类型
6.浮点型与整型的转换方法
c=int8(1) %整型1
c1=double(c) %整型转化为双精度,数据类型创建方法也是转化方法
c2=single(c) %转化为单精度
int8(c1) %双精度转化为整型
whos c c1 c2 %查看数据类型:双精度8字节精度最高
7.精度问题的引出
先看一组程序示例:
(4/3-1)*3-1 %结果不是0
sin(pi) %结果不是0
说明,大家可以在Matlab运行上面两行代码看一下结果,是不是有点意外;
8.浮点型的精度问题
在Matlab中,几乎所有的运算,默认都是以符合IEEE 754标准的双精度算法执行的,由于计算机只能以有限的精度表示数字(双精度要求52个尾数位),对于数值运算,这种浮点型表示值与其真实值存在微小的差异;
所以,如果浮点算术运算的结果不如预期的那样精确,甚至有时会产生数学上非直觉的结果,则很可能是由于计算机硬件的限制造成的,硬件可能没有足够的位来表示结果的完全准确性,因此仅截取了结果值的部分精度;
但这并不是matlab中的错误,运用IEEE 754标准所执行的所有计算都受到影响,其中包括用C或FORTRAN等;
9.精度问题相关函数eps
eps函数默认求数值1的精度,求得的结果是计算机表达1这个数值时,由于硬件限制产生的误差值,因为计算机有限位数只能存储有限精度;
程序示例(建议打开Matlab练习体会)
1
eps
1+eps %返回结果1,即eps视为和1之间没有再存储其他数值,返回1
eps(10) %10附近的精度
eps(100) %100附近的精度
eps(single(100)) %单精度100附近的精度
10.精度问题的处理方法:符号运算
程序示例:
(4/3-1)*3-1 %4/3并非完整精确的分数,而是有限存储空间内的近似值,因此结果并非0
(sym(4/3)-1)*3-1 %返回0,引入符号型获得精确4/3值
sin(pi) %圆周率pi会保留部分精度的小数再进行计算,因此结果有误差
sin(sym(pi)) %sym将pi转化为符号型再求sin值,结果是0
11.相关文章
Matlab自学笔记十三 数据类型:整型,创建方法、取值范围、整型运算、常用函数、程序示例https://blog.csdn.net/freexyn/article/details/128362178Matlab自学笔记九:算术运算、数组运算、矩阵运算、运算符、常用函数、程序示例https://blog.csdn.net/freexyn/article/details/127948563
12.相关视频
1.23/Matlab浮点型数据类型/计算sin(pi)≠0/你知道原因吗
End
自学笔记十四:Matlab浮点型:创建和转换、取值范围、运算和精度问题相关推荐
- Matlab App Designer自学笔记(十四):分档旋钮控件、下拉菜单控件、微调控件
由于一些主观及客观的原因,博主已经放弃了在CSDN上更新文章,感兴趣的朋友可以去我的个人博客去浏览可能需要的文章. 陶小桃Blog-无限进步的优质帅气大学生!热衷于分享技术和日常生活的机械专业小哥哥, ...
- 吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进
吴恩达<机器学习>学习笔记十四--应用机器学习的建议实现一个机器学习模型的改进 一.任务介绍 二.代码实现 1.准备数据 2.代价函数 3.梯度计算 4.带有正则化的代价函数和梯度计算 5 ...
- 《C++游戏开发》笔记十四 平滑过渡的战争迷雾(二) 实现:真正的迷雾来了
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9712321 作者:七十一雾央 新浪微博:http:// ...
- Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理
Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理 Polyworks的工作任务存储分为工作区和项目两级,通过WORKSPACE命令获取工作任务信息,实现更好的任务管理. 下 ...
- 强化学习经典算法笔记(十四):双延迟深度确定性策略梯度算法TD3的PyTorch实现
强化学习经典算法笔记(十四):双延迟深度确定性策略梯度算法TD3的PyTorch实现 TD3算法简介 TD3是Twin Delayed Deep Deterministic policy gradie ...
- 【V-REP自学笔记(八)】控制youBot抓取和移动物体
[V-REP自学笔记(八)]控制youBot抓取和移动物体 [导读] 在这一系列的V-REP自学笔记中,我们定了一个小目标,完成一个Demo.使用官方提供的KUKA公司的YouBot机器人模型来实验机 ...
- 数据科学和人工智能技术笔记 十四、K 最近邻
十四.K 最近邻 作者:Chris Albon 译者:飞龙 协议:CC BY-NC-SA 4.0 确定 K 的最佳值 # 加载库 from sklearn.neighbors import KNeig ...
- 机器学习笔记十四:随机森林
在上一篇机器学习笔记十三:Ensemble思想(上)中,简要的提了一下集成学习的原理和两种主要的集成学习形式. 而在这部分要讲的随机森林,就算是其中属于bagging思路的一种学习方法.为了篇幅,b ...
- 《图解TCP/IP》笔记(十四)传输层两大协议TCP和UDP
前言:这是我<图解TCP/IP>笔记系列最后一篇(咕咕咕了将近两个月hh),TCP UDP其实面试的时候经常问到! 目录 传输层的定义: TCP与UDP对比 端口号 通信识别: 确定端口号 ...
最新文章
- 使用iso升级_华佗品牌战略升级 彰显百年品质-产经要闻
- 面向侧面的程序设计AOP-------《二》本质
- [HNOI2016]矿区
- SAP Gigya里类似Netweaver里SAP_ALL的权限
- python 循环播放音乐_python gstreamer实现视频快进/快退/循环播放功能
- Pwn2Own 2020线上争霸赛落幕:Fluoroacetate 团队四度蝉联 Master of Pwn!
- python卸载干净_Python卸载不干净?Mac完全卸载python方法
- MySql 使用规范推荐(转)
- 数据驱动型文化是大数据成功的关键
- ssh远程连接网络构建
- FPGA教程和allegro教程-链接
- wps计算机打印双面输出,WPS轻松办公—-文档双面打印的两种方法
- 机房服务器巡视项目,年底,机房巡检不能少
- c语言代码混淆器,代码混淆
- oracle里xdb用户,修改Oracle XDB默认监听端口
- RHCE7 -- systemctl命令
- xcode6-beta下载
- matlab开方分布上分位点,概率密度分布函数和上分位点的数值计算
- 服务器知识:什么是云服务器、VPS、高防服务器、国外服务器
- 分享《生死狙击2》的大场景草渲染