博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数值计算中的上溢和下溢
阅读量:4565 次
发布时间:2019-06-08

本文共 686 字,大约阅读时间需要 2 分钟。

利用计算机实现数值计算,指的通常是利用迭代过程更新解来解决数学问题,而不是通过解析过程推到数学公式求解。常见得数值计算主要包括优化问题求解和解线性方程组。

 

上溢和下溢

通常实数在计算机内不能精确保存,利用计算机保存实数时,几乎总会引入一些近似误差。在许多情况下,这仅仅是舍入误差,舍入误差会导致一些问题。特别是在一些复合操作下, 理论上可行的算法,如果在实际中没有考虑到舍入误差的累积,在实际算法运用过程中也会导致算法的失效。

 

其中一种情况就是下溢。即有些逼近零的数,如零除或者对零取对数时,得到-,如果对负无穷进一步运算,则会得到非数字;

 

还有一种情况就是上溢。即大量级的数被近似为正负无穷时,发生上溢。发生上溢后,这些数值也会变为非数值。

 

解决数值上溢和下溢方法的一个实例是使用softmax函数。

定义为:

考虑一下,当所有xi都等于一个常数C。则softmax函数的值为1/n。

如果C很大,exp(c)的上溢会导致整个表达式未定义;

如果C是一个很小的负数,exp(c)会下溢;

解决方法,计算softmax(z)

如此,上溢的问题可以得到解决。下溢的情况也由于分母不为零解决。

But,有个小问题,当计算Log(softmax(z))时,softmax(z)可能为0,从而导致不可解。

解决方法,使用相同的技巧来解log(softmax(z))。

 

不过在多数情况下,可以简单地依赖保证数值稳定地底层库。当需要自己实现算法的时候,则需要考虑数值稳定性的问题。

转载于:https://www.cnblogs.com/xmd-home/p/9592140.html

你可能感兴趣的文章
伪随机数与采样(sampling)
查看>>
matlab 中使用 GPU 加速运算
查看>>
变量和数据结构的赋初值
查看>>
音乐的要素
查看>>
iOS引入JavaScriptCore引擎框架(二)
查看>>
绘图(CGcontext)
查看>>
CRM WEB UI 03搜索界面新建按钮调到详细界面
查看>>
wpa_supplicant安装
查看>>
tilemap坐标转换
查看>>
socket 事件模型
查看>>
列表 list.copy()方法
查看>>
npm 安装远程包(github的)
查看>>
WCF 重新设置服务器地址的bug
查看>>
四、条件、循环、函数定义 练习
查看>>
conky 配置变量表
查看>>
nyoj-38 布线问题
查看>>
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
查看>>
js中正则表达式的使用
查看>>
一些些他山之石
查看>>
计算机科学导论·绪论
查看>>