Infinite integer in Python

后端 未结 3 647
再見小時候
再見小時候 2021-02-11 12:15

Python 3 has float(\'inf\') and Decimal(\'Infinity\') but no int(\'inf\'). So, why a number representing the infinite set of integers is m

相关标签:
3条回答
  • 2021-02-11 12:30

    For python 2. It is sometimes the case that you need a very large integer. For example, I may want to produce a subarray with x[:n] and, I may wish to sometimes set n to a value such that the whole array will be produced. Since you can't use a float for n (python wants an integer), you need a "large integer". A good way of doing this is to use the largest integer available: sys.maxint. Here is an example:

    # MAX_SOURCES = sys.maxint # normal setting
    MAX_SOURCES = 5 # while testing
    
    # code to use an array ...
    ... sources[:MAX_SOURCES]
    

    So, while testing, I could use a smaller sources array but use the full array in production.

    0 讨论(0)
  • 2021-02-11 12:42

    Taken from here: https://www.gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html

    IEEE 754 floating point numbers can represent positive or negative infinity, and NaN (not a number)

    That is, the representation of float and Decimal can store these special values. However, there is nothing within the basic type int that can store the same. As you exceed the limit of 2^32 in an unsigned 32-bit int, you simply roll over to 0 again.

    If you want, you could create a class containing an integer which could feature the possibility of infinite values.

    0 讨论(0)
  • 2021-02-11 12:44

    You are right that an integer infinity is possible, and that none has been added to the Python standard. This is probably because math.inf supplants it in almost all cases (as Martijn stated in his comment).

    In the meantime, I added an implementation of extended integers on PyPI:

    In [0]: from numbers import Integral, Real
    
    In [0]: from extended_int import int_inf, ExtendedIntegral, Infinite
    
    In [0]: i = int_inf
    
    In [4]: float(i)
    Out[4]: inf
    
    In [5]: print(i)
    inf
    
    In [6]: i ** i
    
    Out[6]: inf
    
    In [7]: i
    Out[7]: inf
    
    In [9]: isinstance(i, Real)
    
    Out[9]: True
    
    In [10]: isinstance(i, Integral)
    
    Out[10]: False
    
    In [11]: isinstance(i, Infinite)
    
    Out[11]: True
    
    In [12]: isinstance(i, ExtendedIntegral)
    
    Out[12]: True
    
    In [13]: isinstance(2, ExtendedIntegral)
    
    Out[13]: True
    
    In [14]: isinstance(2, Infinite)
    
    Out[14]: False
    
    0 讨论(0)
提交回复
热议问题