zoukankan      html  css  js  c++  java
  • 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);                  //判读是否为无穷大

  • 相关阅读:
    Java回调函数的理解
    android 解析json数据格式
    python类型转换、数值操作(收藏)
    PyQt4学习资料汇总 (转)
    HDU 2767 Proving Equivalences (Tarjan )
    apache2的安装与简单配置(转)
    HDU 3861 The King’s Problem (Tarjan + 二分匹配)
    MySql的一些基本使用及操作命令 (待更新)
    pcap的安装与配置
    ubuntu下配置安装PYQT4
  • 原文地址:https://www.cnblogs.com/xiangnan/p/3419119.html
Copyright © 2011-2022 走看看