gpt4 book ai didi

python - Python 是否错误地处理了这个 "arbitrary precision integer"?

转载 作者:太空狗 更新时间:2023-10-29 17:13:21 25 4
gpt4 key购买 nike

根据 Python integer ranges 中的答案,Python 应该具有“任意精度整数” .但这个结果显然不是任意精度:

$ python -c 'print("%d" % (999999999999999999999999/3))'
333333333333333327740928

根据 PEP 237 , bignum 是任意大的(不仅仅是 C 的 long 类型的大小)。和 Wikipedia说 Python 的 bignum 是任意精度。

那么为什么上面这行代码的结果不正确呢?

最佳答案

实际上在 python3 中,无论何时除以整数,结果都会得到 float 。有一个 // 运算符可以进行整数除法:

 >>> 999999999999999999999999/3
3.333333333333333e+23
>>> 999999999999999999999999//3
333333333333333333333333

>>> type(999999999999999999999999/3)
<class 'float'>
>>> type(999999999999999999999999//3)
<class 'int'>

这确实给出了正确的任意精度输出:

 python -c 'print("%d" % (999999999999999999999999//3))' 
333333333333333333333333

如何编写同时兼容 python 2.2+ 和 3.3 的代码

这个其实很简单,就是加上:

 >>> from __future__ import division 

这将在 2.2+ 代码中启用 3.X 除法。

>>> from sys import version 
>>> version
'2.7.6 (default, Dec 30 2013, 14:37:40) \n[GCC 4.8.2]'
>>> from __future__ import division
>>> type(999999999999999999999999//3)
<type 'long'>
>>> type(999999999999999999999999/3)
<type 'float'>

关于python - Python 是否错误地处理了这个 "arbitrary precision integer"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21031093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com