之前只知道設置變量的初始值為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)
上述代碼的目的是:從100個隨機數里面找2個最靠近的自然數(不相等):
注意到其中的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 |
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 后面任意值 |
x87 FPU或SSE指令遇到SNaN數時會產生#IA異常,而遇到QNaN時不產生#IA異常(部分指令除外)。
那么既然NAN不是一個真實的數值,在程序如何判斷變量是否變成了NAN呢?大部分語言中針對NAN值都有一系列的函數定義,C語言中最常見的函數如下:
_isnan(double x); //判斷是否為NAN
_finite(double x); //判讀是否為無窮大