我是靠谱客的博主 糊涂毛巾,最近开发中收集的这篇文章主要介绍c语言 nan函数,NaN(not a number)及其函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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)及其函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部