当前位置:首页 » 编程语言 » c语言判断nan

c语言判断nan

发布时间: 2025-05-01 12:57:13

1. c语言中INF和NAN是什么意思

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。(有些较早的编译器版本中,无论是正无穷还是负无穷,都返回非零值,不区分正负无穷)。

2. C语言中INF和NAN是什么意思

在C语言中,INF和NAN是两个特殊的浮点数概念。INF代表无穷大,当计算结果超出浮点数表示范围时,通常表示为正无穷(在Linux中)或#INF:infinity(在Windows中)。NAN则是“非数字”,表示浮点数运算中的未定义状态,如开平方根或对负数求对数等操作的结果,其在Windows中表现为#IND:indeterminate。

当遇到INF,通常意味着发生了数值溢出或除以零的情况。NAN与NAN的比较总是返回false或0,因此不能直接比较。为了检测NAN,可以使用函数isNumber(double),如果输入为NAN,则返回0,否则返回非零值。

在C语言的头文件中,提供了几个宏来判断浮点数的类型,如fpclassify、isfinite、isnormal、isnan和isinf。fpclassify用于识别NAN、无穷大、零、非规格化和正常数,isfinite仅返回非无穷非NAN的结果,isnormal表示正常的浮点数,isnan检测NAN,而isinf则区分正负无穷大。

例如,1.0/0.0会得到正无穷(inf),而sqrt(-1.0)或0.0/0.0会得到NAN。在进行比较或运算时,如1.0/inf,结果会是0.0。通过这些宏,程序员可以准确地处理这些特殊浮点数情况,确保程序的正确性和稳定性。

3. c语言的问题,为什么输出是nan

NaN 的意思是 “Not a Number”, 不是一个数值,或无法表示的数值,例如溢出了, 负数求对数了,分母为0了。

用户可以加入一些打印语句,检查数据是否有错。

再有 A/a 这种运算是整除运算,不能算做是浮点运算。

(3)c语言判断nan扩展阅读:

C语言函数

C语言log()函数:返回x的自然对数(以e为底的对数)

C语言ldiv()函数:求两个数的商和余数(针对long类型)

C语言ceil()函数:求不小于x的最小整数(向上取整)

C语言floor()函数:求不大于x的最大整数(向下取整)

intiscntrl(int ch) 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F)

double cabs(struct complex znum) 返回复数znum的绝对值

4. C语言中出现nan(ind)什么意思

nan 是 "not a number" 的缩写, 即计算结果 不是个 数。
例如: 32 位 数 实际指数 128 ,数符 1 或 0,指数域 二进制 1111 1111。尾数域 等于非零。
ind 是 indeterminate 的缩写,即无法确定 是什么。
对负数开平方,对负数取对数,0.0除以0.0,0.0乘无穷大∞, 无穷大∞除以无穷大∞ 等错误都会 得 到 它。

热点内容
配置文件怎么下载 发布:2025-05-01 16:50:13 浏览:887
c语言买百鸡 发布:2025-05-01 16:49:23 浏览:16
比色算法 发布:2025-05-01 16:41:06 浏览:287
为何绑定腾讯云服务器ip不能用 发布:2025-05-01 16:26:52 浏览:297
ecu算法 发布:2025-05-01 16:26:44 浏览:718
安卓手机用户怎么安装变声器 发布:2025-05-01 16:26:43 浏览:780
coreutils源码 发布:2025-05-01 16:19:16 浏览:345
博物馆采访问题 发布:2025-05-01 16:17:11 浏览:495
汽车中控安卓导航哪个牌子好 发布:2025-05-01 15:48:42 浏览:964
钉钉开发软件需要什么配置 发布:2025-05-01 15:46:38 浏览:568