Python 表示無窮大的數


我之前只知道設置初始值0.今天偶然在Python算法書上看到這個片段,從100個隨機數里面找2個最靠近的自然數(不相等):

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)

 

我猜測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的概念,暫時不知道有什么用.

 

以下內容轉自: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);                  //判讀是否為無窮大


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM