"NaN" 的困扰
来源:互联网 发布:聪明的投资者 知乎 编辑:程序博客网 时间:2024/05/23 00:39
NaN ("Not a Number") 是一种特殊的浮点类型,IEEE754在1985年的时候引入,用于定义一些未定义的浮点运算产生的结果。NaN 不同与 inf or -inf,它并非是一种具体的浮点数值,它一种未定义的浮点操作所产生的结果,可以理解成是另外一种对象,目前在很多语言里面都引入了该定义,如 python, matlab 等等。当然,在计算的时候,通常很少会碰见 NaN,但一旦出现就会造成计算结果异常,而且是伴随在很多迭代或者计算过程中。由于,很多语言都把NaN当成一种数据类型来处理,出现的时候并不会报错或者异常,这无疑是程序的定时炸弹,尤其是那些会涉及到很多矩阵迭代计算的程序。LZ 就吃了这个苦头,在调用随机梯度下降的时候,通常需要迭代很多次计算才会使算法收敛。当出现NaN的时候,有一个很明显的特征矩阵计算的速度会比平时慢 10-100 times,如果你的程序突然间遇到这种情况,最后返回去仔细检查一下在那些地方会引入 NaN 的。下面列举几种会产生 NaN 的操作
会返回 NaN 的运算有如下三种:
- 操作数中至少有一个是 NaN 的运算
- 未定义操作
- 下列除法运算:0/0、∞/∞、∞/−∞、−∞/∞、−∞/−∞
- 下列乘法运算:0×∞、0×-∞
- 下列加法运算:∞ + (−∞)、(−∞) + ∞
- 下列减法运算:∞ - (−∞)、(−∞) - ∞
- 产生复数结果的实数运算。例如:
- 对负数进行开方运算
- 对负数进行对数运算
- 对比-1小或比+1大的数进行反正弦或反余弦运算
0 0
- "NaN" 的困扰
- python的nan,NaN,NAN
- JavaScript的NaN为什么不等于NaN
- RIA的困扰
- 页面缓存的困扰
- WM_QUIT的困扰
- 语言的困扰
- 我的思想困扰
- 初学者的困扰
- 初学者的困扰
- 初学者的困扰
- casio.h的困扰
- JSP乱码的困扰
- Cookie的困扰
- 困扰的脚本错误
- java的编码困扰
- 女生的困扰
- 我的困扰
- Camera显示之app实现简单camera
- CFont与LOGFont、HFont的关系
- vsftpd安装配置
- S3C2416裸机开发系列六_MMU映射
- VI/VIM快捷键
- "NaN" 的困扰
- JS获取回车事件(兼容各浏览器)
- 数据挖掘领域顶级会议期刊及其分析
- POSIX 多线程程序设计
- 字符串分割(C++)
- 在MFC中使用Halcon
- 深入Phtread(一):线程的一生
- Android开发环境建立的难题,ADT插件方式。
- 一道小学奥数题,不会做,求解答