我之前只知道設定初始值0.今天偶然在python演算法書上看到這個片段,從100個隨機數裡面找2個最靠近的自然數(不相等):
from random importrandrange
seq= [randrange(10**10) for i in range(100)]
dd= float("inf")for x inseq:for y inseq:if x == y: continued= abs(x-y)if d
xx, yy, dd=x, y, d
print (xx,yy)
我猜測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
順便還收穫了nan的概念,暫時不知道有什麼用.
infinite(無窮大)數
顯然,這是與finite數相對的。在無窮大數里值是固定的,分為+∞(正無窮大)和∞(負無窮大)。exponent和significand的值如下所示。
型別exponent
significand
值單精度
ff雙精度
7ff擴充套件雙精度
7fff
0x80000000_00000000
對於擴充套件雙精度來說,由於它的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.0***…***
***不為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); //判讀是否為無窮大
Python 表示無窮大的數
偶然間在刷題瀏覽大佬的解題思路時看到了個 float inf 這麼個表示 很low的我當時查詢了下 可表示無窮大 float inf 也可表示無窮小 float inf 任何數字都大不過 float info 小不過 float inf 如隨便給個int變數 x float inf x float ...
無窮大無窮小
如果問題中各資料的範圍明確,那麼無窮大的設定不是問題,在不明確的情況下,很多程式 員都取0x7fffffff作為無窮大,因為這是32 bit int的最大值。如果這個無窮大只用於一般的比較 比如求最小值時min變數的初值 那麼0x7fffffff確實是乙個完美的選擇,但是在更多的情況下,0x7fff...
程式設計中的無窮大
在網上看別人 的時候,經常會看到他們把inf設為0x7fffffff,因為這是32 bit int的最大值。如果這個無窮大只用於一般的比較 比如求最小值時min變數的初值 那麼0x7fffffff確實是乙個完美的選擇。if d u w u v 如果u,v之間沒有邊,那麼w u v inf,如果我們的...