NaN&INF定义
在一些情况会出现无效的浮点数,例如除0,例如负数求平方根等,像这类情况,获取到的浮点数的值是无效的。

NaN 即 Not a Number         非数字

INF  即 Infinite            无穷大

通常无效浮点数的内存表示方法是:

根据IEEE 754标准:
阶码全1,尾数全0表示无穷大INF。例如1.0/0.0

阶码全1,尾数非全0的表示无效数NaN。例如:求负数的平方根,例如0.0/0.0。

(注意: int型时除0是非法的,产生运行异常。Remember,integer division by 0 causes a runtime exception.)

INF无穷大:在doulbe/float时的取值
float f = 0; (4字节 1位符号位,8位指数,23位小数,指数偏移127)

*(UINT*)&f = 0x7F800000L;//正无穷(二进制 [0111 1111] [1000 0000] [0000 0000] [0000 0000])

*(UINT*)&f = 0xFF800000L;//负无穷(二进制 [1111 1111] [1000 0000] [0000 0000] [0000 0000])

double var = 0; (8字节 1位符号位,11位指数,52位小数,指数偏移1023)

// 因为通常是little endian,所以通常修改其前后4个字节

UINT* pVar = ((UINT*)&var) + 1;

*(pVar) = 0x7FF00000L;//正无穷

*(pVar) = 0xFFF00000L;//负无穷

常用的浮点数INF&NaN判断方法:
1.     Windows中,使用_isnan判断NaN情况;使用!_isnan && !_finite判断INF情况;使用!_finite判断NaN和INF两种情况

_isnan  //it returns a nonzero value if the argument x is a NaN;

_finite //It returns 0 if the argument is infinite or a NaN.

2.Linux中,使用insnan和isinf两个函数分别判别两种情况:

isNan

isInf

3.也可自己来写:

int isNaN(double x) {return x != x; }

#define _INF_DEFINE 1.0/0.0

int isInf(double n)

{

static double pinf = 0.0;

static double ninf = 0.0;

if (pinf == 0.0) {

pinf = _INF_DEFINE;

ninf = -pinf;

}

return memcmp(&n, &pinf, sizeof(n)) == 0

|| memcmp(&n, &ninf, sizeof(n)) == 0;

}

依据:

1.   NaN是唯一与自身不等的浮点数类型,所以IsNan可以用 x != x来判断。Anything compared with NAN is false, so NAN == NAN is false.

2.   INF阶码全1,尾数全0

还有一种借用isNan定义INF的方法

int isInf(double x) {return !isNaN(x) && isnan(x-x);}

依据:

1.   Inf – Inf得到的为NaN

转自:https://blog.csdn.net/chunyexiyu/article/details/39179735

浮点数NaN和INF(#IND, #INF)的更多相关文章

  1. C语言中的nan和inf使用

    本文总结nan和inf在C语言当中的含义.产生和判定方法. C语言当中的nan 表示not a number,等同于 #IND:indeterminate (windows) 产生: 对浮点数进行了未 ...

  2. python将nan, inf转为特定的数字

    最近,处理两个矩阵的点除,得到结果后,再作其他的计算,发现有些内置的函数不work:查看得到的数据,发现有很多nan和inf,导致python的基本函数运行不了,这是因为在除的过程中分母出现0的缘故. ...

  3. Python中的inf与nan

    Python中可以用如下方式表示正负无穷 >>> float('inf') # 正无穷,inf不区分大小写,float('InF')一样可以. inf >>> fl ...

  4. python的正负无穷float("inf")的用法

    今天,在看书的时候看到这么一个例子: 这是用来求解 从某个数字列表中找出俩个彼此最接近但是不相等的数(俩者之间的绝对差是最小的): >>> from random import ra ...

  5. Python 关于正负无穷float(‘inf’)的一些用法

    Python中可以用如下方式表示正负无穷: float("inf"), float("-inf") 利用 inf 做简单加.乘算术运算仍会得到 inf > ...

  6. 笔记-python-float(‘inf’)

    笔记-python-float(‘inf’) 看算法时发现了flaot(‘inf’). Python中可以用如下方式表示正负无穷: float("inf"), float(&quo ...

  7. 正负无穷float('inf')的一些用法

    Python中可以用如下方式表示正负无穷: float("inf"), float("-inf") 利用 inf 做简单加.乘算术运算仍会得到 inf > ...

  8. Inno setup 安装*.inf文件_示例

    nno setup 调用*.Inf文件的条目区段名称_示例 首先自己编写一个INF文件来供 Inno setup 进行测试: ;复制以下代码到记事本然后另存为123.inf .然后把123.inf文件 ...

  9. INF文件

    百度百科:http://baike.baidu.com/view/637107.htm?fr=ala0_1_1 INF简介 INF是Device INFormation File的英文缩写,是Micr ...

随机推荐

  1. Linux保证运行一个实例

    1. ; // 默认最大路径长度 inline std::string current_exe_name() { }; int ret = readlink("/proc/self/exe& ...

  2. 复杂SQL示例 (排行榜需求)

    公司项目要求做出排行榜,根据六组数据依次排行,关联多表,SQL记录下来方便日后查看 " ?><!DOCTYPE mapper PUBLIC "-//mybatis.or ...

  3. 在 Deepin 15.9 安装 KiCad EDA 5.1 (2019-05-30)

    在 Deepin 15.9 安装 KiCad EDA 5.1 Deepin (深度系统)是世界著名的 Linux 发行版. KiCad EDA 是世界最强大的开源 PCB 绘制软件. 尝试一:在深度商 ...

  4. DAMICON'S LIST OF OPEN SOFTWARE

    http://www.damicon.com/resources/opensoftware.html DAMICON'S LIST OF OPEN SOFTWARE This List of Open ...

  5. logging.basicConfig函数

    在UI自动化应用中,经常会出错,打log就是一个很重要的环节,python的logging.basicConfig函数 真是既方便,又简单,每次粘贴到用例前,就可以打log了.  logging模块是 ...

  6. [转][ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [中篇]

    我们在<上篇>利用dotnet new命令创建了一个简单的控制台程序,接下来我们将它改造成一个ASP.NET Core应用.一个ASP.NET Core应用构建在ASP.NET Core框 ...

  7. 【CSS3】3D立方体动画

    关于CSS3的3D立方体动画 知识点: 1.每个元素有独立的坐标系 2.坐标系随当前元素的改变而发生改变 3.立方体由静态transform参数构成 4.通过给容器添加动画使立方体运动 效果图: &l ...

  8. HTML静态网页---样式属性

    一.背景与前景 1.背景: 2.前景字体: 二.边界和边框 border(表格边框.样式等).margin(表外间距).padding(内容与单元格间距). 三.列表与方块 width.height. ...

  9. NLP --- 条件随机场CRF详解 重点 特征函数 转移矩阵

    上一节我们介绍了CRF的背景,本节开始进入CRF的正式的定义,简单来说条件随机场就是定义在隐马尔科夫过程的无向图模型,外加可观测符号X,这个X是整个可观测向量.而我们前面学习的HMM算法,默认可观测符 ...

  10. java项目和npm项目命令窗口部署方便调试

    1.maven窗口选择root项目 在点击lifstyle--> package 点击播放箭头 build完毕以后会出现在TARGET目录下todo.jar 在执行 java -jar todo ...