(含Matlab源码)算术编码(arithmetic coding)的underflow问题

0、文章结构

文章的行文逻辑如下,看官可以根据需要跳读,节省时间。

1、介绍underflow和overflow.

2、underflow问题起源

3、underflow问起探索

4、underflow和overflow的常见情形

5、处理一些溢出问题的小技巧

6、对其中的两种小技巧的优缺点比较

 

1、什么是underflow和overflow

在计算机中浮点数都是离散的,有限的。因此计算机无法用有限的浮点数来表示无限的实数。在用浮点数表示实数时,很多数都会存在近似误差。其中一种是下溢(underflow)。比如,一个非常接近于零的数值A(实际上A>0),计算机会直接把该数值判为零,虽然实际上它并不为零。另一种数值误差是上溢(overflow),通俗而言,当一个数值a非常接近某一计算机表示的数值b时(实际a<b),计算机用b表示a。

 

2、起源-算术编码(arithmetic coding)作业初识underflow

音频老师布置一个作业,要求写一段程序实现算术编码,被编码的字符串为:ALIALIBABA

关于算术编码的原理详见:https://blog.csdn.net/qingkongyeyue/article/details/75216790?utm_source=blogxgwz8

这个很简单,很快就用matlab写出来了,最终和老师给的答案一样。

接着老师就布置了第二个算术编码的作业,实现对下方字符串的编码,包含空格。

DIGITAL AUDIO TECHNOLOGY AND APPLICATION

代码中输入该字符串,可是range输出值为0。

理论上来讲,range是一个非常非常小的值,但不等于零。

这时,突然意识到,老师上课时讲到的,程序在数值运算中出现underflow。

此时的溢出问题的代码:https://download.csdn.net/download/h763247747/10777261

 

3、关于underflow问题的探索

变量Range被计算机判为零,但是它实际上并不等于零。

那么在matlab中,数值小于多少会被计算机判为零呢?

EPS函数

EPS是MATLAB中的函数,表示浮点相对精度。 对双精度数值来说eps表示从 1.0 到下一个最大双精度数的距离。对单精度数值来说eps表示从 1.0 到下一个最大单精度数的距离。

在command window中输入:help eps

Matlab中变量默认为double类型,所以其判别值为2^(-52),相当于

所以当变量值小于2.22e(-16)时,计算机会直接判为零,这时就需要考虑underflow了。

 

 

 

4、常见数值误差的情形

由此引出另外一个问题:哪些情况会出现数值误差(underflow 或者overflow)?

下方部分内容来自于此论坛:http://www.ilovematlab.cn/thread-242321-1-1.html。

论坛里有非常多大佬的精彩留言,让人豁然开朗。

情形1-underflow

计算所得0.4的实际值小于0.4。

 

情形2-由underflow出现的错误

计算机中的计算值为3,并不等于4。

 

情形2-误差精度

控制台输出,可以发现误差越来越大。

 

对于情景2问题的分析

双精度浮点数在计算机中使用科学计数法存储,下图所示浮点数格式。

关于浮点数的更加详细信息:https://www.cnblogs.com/icmzn/p/5060195.html

两个浮点数相减时,会存在有效位数字的误差。

假如1.4-1在计算机中的表示为0.3999….9*e(0)(13个9)。

100000000.4-100000000=(1.000000004-1.00000000)*e(8)=0. 0000000039..9(5个9)*e(8)。

运算精度就变差了,误差也会增大。

 

情形3-overflow

 

 

情形4-由于overflow出现的错误

演示underflow和overflow使用的代码:https://download.csdn.net/download/h763247747/10777601

 

4、处理一些溢出问题的小技巧

4.1、判断两个数是否相等

可以使用如下公式:

abs(a-b) < eps(a) or eps(b)

如果不等式成立,则a,b相等。

4.2、解决underflow问题

比如floor((1.4-1)*10),matlab运行的结果为3,并不等于4。为了得到正确的代码,可以如下改写代码。overflow的问题也可以使用类似思路。

 

4.3、提高精度

a-b的结果小于eps(0)时,为了避免结果被计算机判为零,可以使用其它工具,比如advanpix提高精度,比如精确到小数点后200位。

4.4、移位

比如计算0.0000000000111-0.0000000000101时,可以先都乘以10^10,再相减,然后差值再除以10^10,这样可以提高计算精度。

 

5、提高精度和移位的比较

方法2可以更快的解决matlab中出现的溢出问题,但是方法3更加实用。因为在工程领域,很难找到类似advanpix的工具。比如老板要求在arm芯片上实现对音频的算术编码,这样只能用方法3了。

最后用方法4解决音频算术编码underflow问题的代码:https://download.csdn.net/download/h763247747/10777264

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人类与AI结合的最佳形态是什么样?|A16Z内部万字报告

来源&#xff1a;A16Z合伙人Frank Chen2017年7月&#xff0c;我发布了一个关于人工智能、机器学习和深度学习的入门视频。从那以后&#xff0c;我一直痴迷于阅读关于机器学习的报道。一般来说&#xff0c;你会在媒体的头版上看到两类报道。一类报道的标题是“机器人来抢你的工作…

(Matlab源码)Matlab实现算术编码(Arithmetic coding)超级详解(每一段代码都可以看懂)

1、代码功能 输入&#xff1a;一个字符串输出&#xff1a; codeword&#xff08;码值&#xff09; codeword所占的位数 2、代码框图 3、代码超详解 统计字符串中的字符种类&#xff0c;调用函数&#xff0c;放入数组b中。 bunique(str1); 统计每种字符的个数&#xff0c;放入…

(含Python源码)Python实现K阶多项式的5种回归算法(regression)

0、文章结构 为了方便客官根据需要取阅&#xff0c;节约时间&#xff0c;文章目录结构如下&#xff1a; 问题描述理论部分&#xff1a;五种回归算法两种Python读取文件的方法Python实现五种回归算法使用的工具箱总结 1、问题描述 K阶多项式表达式 其中&#xff0c; 现有数据…

首张人类黑洞照片的背后

摘要&#xff1a;沈海军&#xff1a;今天&#xff08;2019年4月10日&#xff09;下午接受广东卫视采访&#xff0c;就晚上21:00即将发布的人类首张黑洞照片发表了评论。提笔撰稿时&#xff0c;尚未到照片官方的发布时间&#xff0c;故不能一睹黑洞照片的芳容&#xff0c;但鉴于…

一场“交通进化”将至: 5G带给车联网与自动驾驶哪些升级?

来源 &#xff1a;腾讯科技作者&#xff1a;李俨 美国高通公司技术标准高级总监5G时代已经来临&#xff0c;走向商用的步伐也在逐渐加快。腾讯科技联合优质科技CP以及行业专家推出“5G局中局”系列文章&#xff0c;为你解读5G在通讯、物联网、车联网、工业联网、边缘计算、云服…

特斯拉发布Q1无人驾驶安全报告:事故增多 但还是比人类少

来源&#xff1a;聚焦AI的近日&#xff0c;电动汽车制造商特斯拉发布了2019年第一季度自动驾驶仪&#xff08;Autopilot&#xff09;安全性报告&#xff0c;这是特斯拉发布的第三份类似报告&#xff0c;此前该公司认为媒体对特斯拉车辆事故的报道有失公允&#xff0c;因此他们开…

log4net 小记

突然想到想测试一下log4net&#xff0c;结果折腾了两天&#xff0c;才弄出来.....记录下来以备以后查看 背景&#xff1a;vs2013 mvc项目中想体验下log4net的功能&#xff08;主要是文件记录&#xff09; 翻看了log4net的相关资料&#xff0c;才发现其实它是有很多功能的&#…

关于找工作和选专业的思考

个人的成长离不开国家的发展&#xff0c;国家的发展离不开国际的大气候。 国家之间的竞争主要归于经济竞争&#xff0c;经济的核心在于产业&#xff0c;产业的核心则在于科学和技术。 无论是找工作还是选专业&#xff0c;赌的都是对未来趋势的预测&#xff0c;没有人会希望自己…

DARPA 2020财年研发预算 人工智能应用研究投资急剧增长

来源&#xff1a;美国国防部等摘要&#xff1a;2019年3月&#xff0c;特朗普政府公布2020财年预算申请。根据预算法案&#xff0c;2020财年美国国家安全预算总额增加340亿美元&#xff0c;达到7500亿美元&#xff0c;比上年增加5%。美国防部分得的经费为7180亿美元&#xff0c;…

使用Matlab(R2018b)画复杂函数的图形(网格图meshgrid)及等高线contour

1、函数 这里使用2D Michalewicz 函数&#xff0c;其表达式为&#xff1a; 2、画图 2.1 编写2D Michalewicz 函数 f(x,y)(-sin(x).*(sin(x.^2/3.1415926)).^(2*m)...-sin(y).*(sin(2*y.^2/3.1415926)).^(2*m)); 上述代码使用到了Anonymous Functions, 相关变量的数据类型为…

科创板:中国科技产业新引擎

来源&#xff1a;国信研究作者&#xff1a;杨均明&#xff0c;国信证券经济研究所所长万众期待的上海证券交易所科创板即将推出&#xff0c;科创板股票发行审核规则第三条要求&#xff0c;发行人申请股票首次发行上市&#xff0c;应当符合科创板定位&#xff0c;面向世界科技前…

粒子群优化算法(Particle Swarm Optimization)的 Matlab(R2018b)代码实现

这里以 2D Michalewicz function 为对象来演示粒子群算法。 1、Michalewicz function 2、代码详解 2.1 画Michalewicz函数的网格图形 f(x,y)(-sin(x).*(sin(x.^2/3.1415926)).^(2*m)...-sin(y).*(sin(2*y.^2/3.1415926)).^(2*m));range[0 4 0 4]; Ngrid100; dx(range(2)-ran…

中金人工智能报告:AI时代,10 年之后我们还能干什么?|71页完整报告

来源&#xff1a;黑科技智汇中金公司&#xff08;CICC&#xff09;发布了一份长达 71 页的人工智能的证券研究报告《人工智能时代&#xff0c;10 年之后我们还能干什么&#xff1f;》。对全球特别是中国企业当下的人工智能态势作了全面的介绍&#xff1a;包括 BAT、华为、科大讯…

UC伯克利新机器人成果:灵活自由地使用工具

来源&#xff1a;AI 科技评论摘要&#xff1a;前几天我们刚刚介绍了加州大学伯克利分校 Pieter Abbeel 教授领导伯克利机器人学习实验室&#xff08;UC Berkeleys Robot Learning Lab&#xff09;开发的会叠衣服的家务向机器人 BLUE&#xff0c;今天伯克利人工智能实验室&#…

bzoj 1934 最小割

收获&#xff1a; 1、流量为0的边可以不加入。 2、最小割方案要与决策方案对应。 1 #include <cstdio>2 #include <cmath>3 #include <cstring>4 #include <vector>5 #define min(a,b) ((a)<(b)?(a):(b))6 #define oo 0x3f3f3f3f7 #define N 6108 …

工业4.0:数字化供应链的三个方向

来源&#xff1a;资本实验室席卷全球的工业4.0革命几乎影响着每一个行业&#xff0c;包括各行业的供应链管理。在过去&#xff0c;供应链管理是令各行业都非常头疼的环节&#xff0c;因为传统供应链涉及大量模糊且无法访问的数据&#xff0c;就像”黑洞“一样吞噬着成本、时间与…

有效学习

怎样算有效学习&#xff1f; 记得有位大咖说过&#xff0c;‘当你把受过的教育都忘记了&#xff0c;剩下的就是教育’&#xff08;度娘说是爱因斯坦说的&#xff0c;此处未经考证&#xff09;。 学习可以看成是一个把知识放入潜意识的过程。所谓进入潜意识&#xff0c;是指当…

如果机器能帮我们学习,那么有多少东西能够被遗忘?

来源&#xff1a;原理在我还是个学生时的遥远年代&#xff0c;大多数计算机都还是体型巨大的机器。当时我有一个朋友&#xff0c;他的博士导师坚持让他对一个冗长又困难的原子理论进行手写计算。他用掉了一页又一页的草稿纸&#xff0c;上面充满了错误。于是最终他屈服于自己的…

如何通俗理解计算机视觉、计算机图形、图像处理之间的区别与联系

这三者之间联系和区别可以通过下图表示&#xff0c; 左边的图片表示实际景物&#xff0c;右边图片表示实际景物对应的图片。 1、计算机图形 计算机图形技术常用于计算机生成图形。该技术常用的领域有&#xff1a; a.动漫 b.游戏 c.计算机辅助设计&#xff08;CAD&#xff09;…

日本电信企业5G部署计划 限制了华为中兴设备的使用

来源&#xff1a;OFweek电子工程据外媒报道&#xff0c;日本监管机构日前正式向日本电信企业分配5G频谱&#xff0c;而这也正是日本在来年春季推出高速无线服务(5G)的一个重要里程碑。日本三大运营商NTT Docomo、KDDI和软银&#xff0c;以及新进入者Rakuten Inc&#xff0c;都获…