长整数的最大值

时间:2012-03-25 13:41:55

标签: python

如何将长整数的最大值赋给变量,例如,类似于C ++的LONG_MAX

8 个答案:

答案 0 :(得分:121)

长整数:

没有明确定义的限制。可用地址空间量构成实际限制 (取自this网站)。查看Numeric Types上的文档,您将看到Long integers have unlimited precision。在Python 2中,当Integers超出限制时,它们会自动切换为long:

>>> import sys
>>> type(sys.maxsize)
<type 'int'>
>>> type(sys.maxsize+1)
<type 'long'>


对于整数我们有

maxint和maxsize:

int的最大值可以在{2.}}的Python 2.x中找到。它已在Python 3中删除,但通常可以使用sys.maxint。来自the changelog

  

删除了sys.maxint常量,因为不再存在限制   到整数的值。但是,sys.maxsize可以用作   大于任何实际列表或字符串索引的整数。它符合   实现的“自然”整数大小通常是相同的   作为同一平台上以前版本中的sys.maxint(假设为   相同的构建选项)。

,对于对the difference感兴趣的人(Python 2.x):

  

sys.maxint Python常规支持的最大正整数   整数类型。这至少是2 ** 31-1。最大的负整数   is -maxint-1 - 使用2的补码产生不对称性   二进制算术。

     

sys.maxsize 平台支持的最大正整数   Py_ssize_t类型,因此最大大小列表,字符串,dicts和   许多其他容器都可以拥有。

为了完整性,这里是Python 3 version

  

<强>了sys.maxsize   给出最大值的整数可以是Py_ssize_t类型的变量。在32位平台上通常是2 ^ 31 - 1   在64位平台上使用2 ^ 63 - 1。

浮:

sys.maxsizefloat("inf")。这些可以与其他数字类型进行比较:

float("-inf")

答案 1 :(得分:36)

Python long可以任意大。如果您需要一个大于任何其他值的值,则可以使用float('inf'),因为Python在比较不同类型的数值时没有任何问题。同样,对于小于任何其他值的值,您可以使用float('-inf')

答案 2 :(得分:19)

直接回答标题问题:

整数大小不受限制,在Python中没有最大值。

回答哪些地址陈述了基本用例:

根据你对你要做的事情的评论,你正在考虑的事情是

minval = MAXINT;
for (i = 1; i < num_elems; i++)
    if a[i] < a[i-1]
        minval = a[i];

这不是如何用Python思考的。更好的Python翻译(但仍然不是最好的)将是

minval = a[0]  # Just use the first value
for i in range(1, len(a)):
    minval = min(a[i], a[i - 1])

请注意,上面根本不使用MAXINT。该部分解决方案适用于任何编程语言:您不需要知道最高可能值,只是为了找到集合中的最小值。

但无论如何,你在Python中真正所做的只是

minval = min(a)

也就是说,你根本不写循环。内置的min()函数获得整个集合的最小值。

答案 3 :(得分:8)

Python 2.x中的

long类型使用arbitrary precision arithmetic并且没有最大可能值。它受可用内存的限制。 Python 3.x对于无法用本机整数表示的值没有特殊类型 - 一切都是int,并且在后台处理转换。

答案 4 :(得分:7)

与C / C ++不同,Python中的Long具有无限的精度。有关更多信息,请参阅python中的Numeric Types部分。要确定整数的最大值,您可以参考sys.maxint。您可以从sys的文档中获取更多详细信息。

答案 5 :(得分:0)

您可以使用:float的最大值是

float('inf')

表示否定

float('-inf')

答案 6 :(得分:0)

A)为了进行便宜的比较/算术虚拟,请使用math.inf。或math.nan,它除了身份检查(FALSE)以外的任何方向(包括nan == nan)比较is并呈现任何算术运算(如nan - nan){{1 }}。或根据您的使用情况而定的较高的实整数(例如nan)。对于位掩码虚拟对象(例如在sys.maxsize中),请使用mybits & bitmask

B)要获取平台原始的最大有符号long int(或long long):

-1

C)可以通过长时间运行的循环戏弄内存溢出来估计最大Python整数(尝试>>> 256 ** sys.int_info.sizeof_digit // 2 - 1 # Python’s internal primitive 2147483647 >>> 256 ** ctypes.sizeof(ctypes.c_long) // 2 - 1 # CPython 2147483647 >>> 256 ** ctypes.sizeof(ctypes.c_longlong) // 2 - 1 # CPython 9223372036854775807 >>> 2**63 - 1 # Java / JPython primitive long 9223372036854775807 -可以由256**int(8e9)停止)。但是不能合理地使用它,因为它的表示形式已经消耗了所有内存,并且其消耗量远远大于KeyboardInterrupt

答案 7 :(得分:-1)

在python3中,你可以将float值发送到int函数中,以整数表示形式得到该数字1.7976931348623157e + 308。

import sys    
int(sys.float_info.max)