Python初始值表示為無窮大

來源:互聯網
上載者:User

標籤:

  之前只知道設定變數的初始值為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
 對於擴充雙精確度來說,由於它的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.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);                  //判讀是否為無窮大

Python初始值表示為無窮大

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.