inf&nan(摘录自百度)

摘录自百度(http://zhidao.baidu.com/link?url=Vv8vThjOgVIl1WV_WF_9yJcGVwt_2RkwdK3nyNuRZJa_tKOf0hSDUpratetydnXnb6FsBaUbJF3xtCsVEfULga)

inf :infinity (linux) 等同于 #INF:infinity 
(windows)

  nan :not a 
number 等同于 
#IND:indeterminate (windows)

  注意:1、inf一般是因为得到的数值,超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值);而nan一般是因为对浮点数进行了未定义的操作,如对-1开方。

  2、nan==nan 
结果是0或false,即不能和nan进行比较,和nan进行比较得到的结果总是false或0。所以可以用函数: int 
isNumber(double d){return (d==d);}来判断d是否为nan,若d是nan则返回0,否则返回非零值。

  3、1.0/0.0等于inf,-1.0/0.0等于-inf,0.0+inf=inf;

  4、对负数开方sqrt(-1.0)、对负数求对数(log(-1.0))、0.0/0.0、0.0*inf、inf/inf、inf-inf这些操作都会得到nan。(0/0会产生操作异常;0.0/0.0不会产生操作异常,而是会得到nan)

  5、得到inf时就查看是否有溢出或者除以0,得到nan时就查看是否有非法操作。

  6、C语言的头文件<float.h>中,有定义的常量DBL_MAX,这个常量表示“能表示出来的最大的双精度浮点型数值”。<float.h>中还有常量DBL_MIN,DBL_MIN表示可以用规格化表示的最小的正浮点数,但DBL_MIN并不是最小的正浮点数,因为可以用可以用非规格化浮点数表示的更小。可以用函数:int 
isFiniteNumber(double d){return 
(d<=DBL_MAX&&d>=-DBL_MAX);}来判断d是否为一个finite数(既不是inf,又不是nan(加入d为nan,则d参加比较就会得到false(0)值))。

  7、1.0/inf等于0.0。

  8、inf是可以与其他浮点数进行比较的,即可以参与<=、>+、==、!=等运算。

  

  下面这几个宏(用宏实现的,使用时跟函数的形式基本相同)是判断一个表达式的结果是否为inf、nan或其他:

  头文件:include<math.h>

  宏的用法(类似于函数原型):int fpclassify(x);

  int 
isfinite(x);

  int 
isnormal(x);

  int isnan(x);

  int isinf(x);

  具体用法:

  1、int 
fpclassify(x) 
用来查看浮点数x的情况,fpclassify可以用任何浮点数表达式作为参数,fpclassify的返回值有以下几种情况。

  FP_NAN:x是一个“not a number”。

  FP_INFINITE: x是正、负无穷。

  FP_ZERO: x是0。

  FP_SUBNORMAL: x太小,以至于不能用浮点数的规格化形式表示。

  FP_NORMAL: x是一个正常的浮点数(不是以上结果中的任何一种)。

  2、int 
isfinite(x) 
当(fpclassify(x)!=FP_NAN&&fpclassify(x)!=FP_INFINITE)时,此宏得到一个非零值。

  3、int 
isnormal(x) 当(fpclassify(x)==FP_NORMAL)时,此宏得到一个非零值。

  4、int 
isnan(x) 当(fpclassify(x)==FP_NAN)时,此宏返回一个非零值。

  5、int 
isinf(x) 当x是正无穷是返回1,当x是负无穷时返回-1。(有些较早的编译器版本中,无论是正无穷还是负无穷,都返回非零值,不区分正负无穷)。

时间: 2024-10-05 00:37:55

inf&nan(摘录自百度)的相关文章

浮点数NaN和INF(#IND, #INF)

参考: http://www.cplusplus.com/reference/cmath/isnan/ http://technet.microsoft.com/zh-cn/tzthab44(v=vs.95) http://blog.163.com/chen_dawn/blog/static/112506320125494852135/ http://blog.csdn.net/zhang11wu4/article/details/7781099 http://baike.baidu.com/v

python数据分析入门学习笔记儿

学习利用python进行数据分析的笔记儿&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分析相关python库的介绍(前言1~4摘抄自<利用python进行数据分析>) 1.Numpy: Numpy是python科学计算的基础包,它提供以下功能(不限于此): (1)快速高效的多维数组对象naarray (2)用于对数组执行元素级计算以及直接对数组执行数学运算的函数 (3)用于读写硬盘

python数据分析入门笔记[1]

1.Numpy: Numpy是python科学计算的基础包,它提供以下功能(不限于此): (1)快速高效的多维数组对象naarray (2)用于对数组执行元素级计算以及直接对数组执行数学运算的函数 (3)用于读写硬盘上基于数组的数据集的工具 (4)线性代数运算.傅里叶变换,以及随机数生成 (5)用于将C.C++.Fortran代码集成到python的工具 2.pandas pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数.pandas兼具Numpy高性能的数组计算功能以及

鸽子洞原理或者称为抽屉原理

原理概述: 有n只鸽子和m个鸽洞,所有鸽子都住在鸽洞里,如果n>m,那么至少有二只鸽子必须住在同一鸽洞里. 函数观点: 把鸽子看成是定义域A中元素ai,鸽洞看成是值域B中的元素bj,鸽子住鸽洞作为函数关系. 鸽洞原理: 设f是从有限集A到有限集B的函数,若|A|>|B|,则必有a1,a2∈A,a1≠a2,使f(a1)=f(a2)=b∈Bf 包含于B(Bf是象域). 反证:若对任意a1,a2∈A,a1≠a2,f(a1)≠f(a2),|A|=|Bf|≤|B|与|A|>|B|矛盾 注: 鸽洞原

python3.4 build in functions from 官方文档 翻译中

2. Built-in Functions https://docs.python.org/3.4/library/functions.html?highlight=file The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order.     Built-in Funct

戴尔Inspiron N4120 笔记本电脑安装XP、win7双系统过程

好多年前也试着在我笔记本上装过双系统,当时也是觉得好玩,或者是认为以后真的可能要用到XP系统.怎奈何出师不利.当时是按照网上的教程来的,想着用ghostXP系统来装,进入PE系统,当时对这些东西还很陌生,我就不经意间点了一个自动分区的东西,尼玛玛玛玛玛玛玛玛玛玛......,整个硬盘格式化了....,后来就特别讨厌用ghost的方法来安装系统. 转入正题,现在工作了以后,平时也都是用用公司的电脑办办公,自己电脑都是用来打游戏的.不过还是放不下自己以前做过的嵌入式的东西,所以想回过头来从新学一下.

我的Android进阶之旅------&gt;Android【设置】-【语言和输入法】-【语言】列表中找到相应语言所对应的列表项

今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了.所以首先我得把系统的语言切换到波兰语,问题是哪个是波兰语呢? 我还真的不认识哪个列表项代表着波兰语.如下图所示:进入到[设置]-[语言和输入法]-[语言]列表后,我就傻眼了,哪个是波兰语呢?本文将介绍如何在列表中找到相应语言所对应的列表项. ([Settings]-[Language & input]-[Language]) 哪个是波兰语呢?好吧,我只认识 日本语.中文.英语的几项,其他的

[C语言]进阶|数据类型: 整数, 浮点, 逻辑, 类型转换和条件运算

--------------------------------------------------------------------------------- [C语言的类型] 整数: char, short, int, long, long long 浮点数: float,double,long double 逻辑: bool 指针 自定义类型 [类型有什么不同] 类型名称:int,long,double 输入输出时的格式化:%d,%ld,%lf 所表达的数的范围:char < short

ASCII

在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a.b.c.d这样的52个字母(包括大写).以及0.1等数字还有一些常用的符号(例如*.#.@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示. ASC