Python初始值表示为无穷大

无穷大的表示方法:

float("inf")

无穷小怎么表示呢?官方文档中有这么一句话:

float also accepts the strings “nan” and “inf” with an optional prefix “+” or “-” for Not a Number (NaN) and positive or negative infinity.

float('-Inf')==-float('Inf')

以下内容转自:http://blog.sina.com.cn/s/blog_a9303fd90101d3tx.html

infinite(无穷大)数

显然,这是与finite数相对的。在无穷大数里值是固定的,分为+∞(正无穷大)和-∞(负无穷大)。exponent和significand的值如下所示。

类型exponentsignificand
单精度FF02128
双精度7FF021024
扩展双精度7FFF0x80000000_00000000216384

 对于扩展双精度来说,由于它的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备注
SNaN1.0XXXXXXXXX不为0
QNaN1.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);                  //判读是否为无穷大

发布者:Johngo。文章已受到原创版权保护。
转载请注明出处:https://www.johngo689.com/2353/

发表评论

您的电子邮箱地址不会被公开。