概述
infinite(无穷大)数
显然,这是与finite数相对的。在无穷大数里值是固定的,分为+∞(正无穷大)和∞(负无穷大)。exponent和significand的值如下所示。
类型
exponent
significand
值
单精度
FF
0
2128
双精度
7FF
0
21024
扩展双精度
7FFF
0x80000000_00000000
216384
对于扩展双精度来说,由于它的J位是显式的,必须为1值(否则是unsupported类型),因此significand的值为0x80000000_00000000。
NaN(not a
number)数
如果一个数超出infinite,那就是一个NaN(not a
number)数。在NaN数中,它的exponent部分为可表达的最大值,即FF(单精度)、7FF(双精度)和7FFF(扩展双精度)。
NaN数与infinite数的区别是:infinite数的significand部分为0值(扩展双精度的bit63位为1)。而NaN数的significand部分不为0值。
NaN数包括下列两类。
① SNaN(Signaling NaN)数:SNaN数表示是一种比较严重的错误值。
② QNaN(Quiet NaN)数:在一般情况下,QNaN数是可接受的。
SNaN和QNaN数的编码区别在于significand部分的不同,如下所示。
NaN类型
significand
备注
SNaN
1.0XXX…XXX
XXX不为0
QNaN
1.1…
1.1 后面任意值
SNaN数的significand以1.0开头(并且1.0后面的位不为0值),而QNaN数的significand是1.1开头。
x87 FPU或SSE指令遇到SNaN数时会产生#IA异常,而遇到QNaN时不产生#IA异常(部分指令除外)。
那么既然NAN不是一个真实的数值,在程序如何判断变量是否变成了NAN呢?大部分语言中针对NAN值都有一系列的函数定义,C语言中最常见的函数如下:
_isnan(double x); //判断是否为NAN
_finite(double x); //判读是否为无穷大
最后
以上就是糊涂毛巾为你收集整理的c语言 nan函数,NaN(not a number)及其函数的全部内容,希望文章能够帮你解决c语言 nan函数,NaN(not a number)及其函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复