Jef*_*der 15 python arbitrary-precision
根据Python整数范围的答案,Python应该具有"任意精度整数" .但是这个结果显然不是任意精度:
$ python -c 'print("%d" % (999999999999999999999999/3))'
333333333333333327740928
Run Code Online (Sandbox Code Playgroud)
根据PEP 237,bignum任意大(不仅仅是C long型的大小).和维基百科说,Python的bignum是任意精度.
那么为什么上面一行代码的结果不正确呢?
jb.*_*jb. 27
实际上在python3中,每当你划分整数时,你就会得到浮点数.有一个//运算符执行整数除法:
>>> 999999999999999999999999/3
3.333333333333333e+23
>>> 999999999999999999999999//3
333333333333333333333333
>>> type(999999999999999999999999/3)
<class 'float'>
>>> type(999999999999999999999999//3)
<class 'int'>
Run Code Online (Sandbox Code Playgroud)
这确实提供了正确的任意精度输出:
python -c 'print("%d" % (999999999999999999999999//3))'
333333333333333333333333
Run Code Online (Sandbox Code Playgroud)
这实际上很简单,只需添加:
>>> from __future__ import division
Run Code Online (Sandbox Code Playgroud)
这将使2.2X代码中的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'>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9012 次 |
| 最近记录: |