考虑这个Python代码:Python数字包装?
assert(a > 0)
assert(b > 0)
assert(a + b > 0)
可在第三断言过失败吗?在C/C++中,如果总和溢出最大整数值,则可以。这在Python中如何处理?
考虑这个Python代码:Python数字包装?
assert(a > 0)
assert(b > 0)
assert(a + b > 0)
可在第三断言过失败吗?在C/C++中,如果总和溢出最大整数值,则可以。这在Python中如何处理?
取决于您使用的是哪个版本的Python。
在2.2左右之前,你可以得到OverflowError
。
如果它太大而不适合int
,则版本2.2-2.7将总和提升为long
(任意精度)。
3.0+只有一个整数类型,它是任意的精度。
Python会自动将整数提升为任意精度。如果一个浮动变得太大,它将是inf
。因此,如果a
和b
都是不可分割的,并且内存不足,则只会失败。
如果a + b
是大于最大整数值越大,结果将是一个漫长:
>>> import sys
>>> sys.maxint
9223372036854775807
>>> a = sys.maxint
>>> b = 1
>>> a + b
9223372036854775808L # A long
>>> assert a > 0
>>> assert b > 0
>>> assert a + b > 0
不论断言是否过期都无关紧要。 – Zimm3r 2010-09-24 22:03:09
确定的回答你的问题一般是没有,但是如果你处理大量你可以有一些问题,下面是python大数据的细节。
也看到这个帖子对INF(无穷大)信息NaN(非数(即无穷大/无穷= NAN))
请注意:这是一个32位的AMD的机器上(尽管蟒蛇说:它是英特尔(是指它是32位??)
Python 2.6.2(r262:71605,2009年4月14日,22点40分02秒)[MSC v.1500 32位(Intel)] on win32
CPython在其数学模块(底层C lib)中的最大数量否则会溢出o R返回INF是8.2184074615549724e + 309
>>> x = 8.2184074615549724e+309
>>> x
8.2184074615549724e+309
>>> x + 1
>>> x
inf
>>> x = exp(710)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: math range error
的最大数目(蟒可表示)是1.7976931348623157e + 308,并且可以通过(可能的其他方式也)
http://docs.scipy.org/doc/numpy/reference/generated/numpy.finfo.html
>>> import numpy
>>> f = numpy.finfo(float()
>>> f.max
1.7976931348623157e+308
>>> m = f.max
>>> m1 = m + 100 # supposedly increase the number by 100
>>> m
1.7976931348623157e+308
>>> m1
1.7976931348623157e+308
>>> # note how m1 and m are the same number
>>> m == m1
True
>>>
可以得到
我相信(但不知道),这是由于数学使用的底层C库 http://docs.python.org/library/math.html
特定于CPython数学模块 主要由平台C数学函数周围的薄包装 组成。 特殊情况下的行为如下 C99标准的附录F,其中 合适。目前 实施,将提高ValueError异常 像开方非法操作(-1.0) 或日志(0.0)(其中C99附件F 建议信令无效操作 或除以零),并OverflowError 的结果溢出(对于 例如,EXP(1000.0))
改变在2.6版本:行为 特殊情况下,现在的目标是遵循C99 附件F.在早期版本的Python 在特殊情况下的行为是 松散specified.loosely规定。
Python的最大整数(int型)是由所有的sys.maxint定义。的最大整数和最大数量之间的差异是这个
>>> type(x)
<type 'float'>
>>> int_x = int(x)
>>> type(int_x)
<type 'long'>
>>>
的最大数量是原来的浮动,但是,当我们试图将其转换为整数使用int()函数将自动转换为long类型,因为它是通过sys.maxintloosly指定。
假设a和b不是具有重定义运算符的类:P – Colin 2010-09-24 21:58:19