当前位置: 首页 > 面试题库 >

Python和“任意精度整数”

柯凯旋
2023-03-14
问题内容

根据Python整数范围内的答案,Python)应该具有“任意精度整数”
。但是这个结果显然 不是 任意精度:

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

根据PEP
237
,它bignum是任意大的(不仅仅是Clong类型的大小)。和维基百科说,Python的bignum是任意精度。

那么,为什么以上代码行的结果不正确?


问题答案:

实际上,在python3中,每当您对int进行除法运算时,都会得到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'>


 类似资料:
  • 我正在用C实现一个任意精度的算术库,在实现gamma函数的时候我陷入了困境。 通过分别使用等价 和 ,我可以得到所有实数值 的范围内 的有理数 。 但是,我不知道如何计算。对于Lanczos近似(https://en.wikipedia.org/wiki/Lanczos_approximation),我需要预先计算的值p,这些值恰好计算非整数值的阶乘(?!),并且以我目前的知识无法动态计算……在实

  • 问题内容: 我有一个numpy的2d数组[中/大型- 例如500x500]。我想找到它的元素智能指数的特征值。问题在于某些值是非常负的(-800,-1000等),并且它们的指数下溢(意味着它们非常接近零,因此numpy将其视为零)。无论如何在numpy中使用任意精度? 我做梦的方式: 我已经搜索了gmpy和mpmath的解决方案,但无济于事。任何想法都将受到欢迎。 问题答案: SymPy可以计算任

  • 当 小数点后15位的数字被证明是错误的。(尽管很高兴给你的数字远远超过15位!) 在Python中,如何获得的十进制扩展中的第一个正确数字?

  • 问题内容: 我正在寻找一种以任意精度(例如点后50位数左右)计算平方根的方法。 在python中,可以使用Decimal轻松访问它: 看到强大的功能后,我浏览了文档,但没有发现任何类似的内容。 因此,我唯一的选择是编写某种数值计算方法,该方法将迭代地尝试计算答案吗? 问题答案: 这是我自己的平方根计算实现。在等待答案时,我决定尝试一下计算平方根的方法。它有很多方法,但最后我发现通过减法 pdf 链

  • 问题内容: 我试图通过在numpy中进行解析/数据累积来加快我去年编写的二进制文件解析器的速度。numpy定义自定义数据结构并将数据从二进制文件导入其中的能力看起来像我所需要的,除了这些文件中的某些字段是“非标准”长度(例如6字节)的无符号整数。由于我使用的是Python 2.7,所以我制作了自己的int.from_bytes仿真版本来处理这些字段,但是如果有任何方法可以将这些字段读取为numpy

  • 为什么此代码引发此异常: 线程“main”java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Double 而这个,运行良好: 两者都是尝试将整数转换为双精度,对吗?