Python初步值表示为无穷大

  此前只知道设置变量的初叶值为0。明天在写互连网路径分析的时候,为了找到离任意坐标距离近年来的节点,开始设置最短距离为无穷大,然后不断的去替换,直到找到方今的节点。

  刚起初设置是min_dis =
999999999999,作为距离不是尤其大的也是能够的,于是试想是还是不是Python提供了有无穷大的代表方法,查阅文书档案,果然如此:

from random import randrange 
seq = [randrange(10**10) for i in range(100)] 
dd = float("inf") 
for x in seq: 
    for y in seq: 
        if x == y: continue 
        d = abs(x-y) 
        if d < dd: 
            xx, yy, dd = x, y, d 
print (xx,yy)

上述代码的目的是:从九十八个随机数里面找3个最靠近的自然数(不等于):

瞩目到当中的dd起始值:

dd = float("inf") 

 此处需求确认保证dd伊始丰富大,能够判明dd表示的是一个极大的值,经查实,dd表示的即为无穷大,见文书档案:

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')
true

 

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


infinite(无穷大)数

众人周知,那是与finite数相对的。在无限大数里值是原则性的,分为+∞(正无穷大)和-∞(负无穷大)。exponent和significand的值如下所示。

类型 exponent significand
单精度 FF 0 2128
双精度 7FF 0 21024
扩展双精度 7FFF 0x80000000_00000000 216384

 对于增加双精度来说,由于它的J位是显式的,必须为1值(不然是unsupported类型),由此significand的值为0x八千0000_00000000。

NaN(not a number)数

假如2个数超过infinite,那正是贰个NaN(not
a
number)数。在NaN数中,它的exponent部分为可发挥的最大值,即FF(单精度)、7FF(双精度)和7FFF(扩充双精度)。

NaN数与infinite数的区分是:infinite数的significand部分为0值(扩张双精度的bit6肆位为1)。而NaN数的significand部分不为0值。

NaN数包含下列两类。

① SNaN(Signaling NaN)数:SNaN数表示是一种比较严重的错误值。

② QNaN(Quiet NaN)数:在相似意况下,QNaN数是可接受的。

SNaN和QNaN数的编码差异在于significand部分的例外,如下所示。

NaN类型 significand 备注
SNaN 1.0XXXXXX 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);                  //判读是或不是为无穷大