繁体   English   中英

在python中成为最大的数字

[英]Make the biggest number in python

我正在寻找一个保证比任何给定int更大的Python对象。 它应该是可移植的,独立于平台的,并且可以在Python 2.7+和3.x上运行。

例如:

x = float('inf')
while True:
    n = next(my_gen)
    if my_calc(n):
        x = min(n, x)
        if my_cond(x):
            break

在这里,我为此使用了float('inf') ,因为它似乎行为正确。 但这感觉很脏,因为我认为它依赖于一些基本的float规范,而且我不知道这是否依赖于平台还是会以意外的方式中断。

我知道我可以创建自己的类并定义比较运算符,但我认为可能存在现有的内置方法。

这样使用float('inf')是否安全? 有没有那么丑陋的方式来创建这个“最大整数”?

保证float('inf')可以大于任何数字(包括整数float('inf')进行测试。 这不是特定于平台的。

floatobject.c源代码

else if (!Py_IS_FINITE(i)) {
    if (PyInt_Check(w) || PyLong_Check(w))
        /* If i is an infinity, its magnitude exceeds any
         * finite integer, so it doesn't matter which int we
         * compare i with.  If i is a NaN, similarly.
         */
        j = 0.0;

Python整数本身仅受内存限制,因此使用10 ** 3000可能不够大。

float('inf') 始终可用; Python将为您处理基础平台的细节。

为什么不只是使用:

x = float('inf')

代替:

x = 1e3000

阅读这篇文章以获取更多信息。

在下文中,我通过使用外部while循环来捕获第一个有效x然后在保留的内部while循环中使用它来消除对第一个前哨 x的需要

while True:
    n = next(my_gen)
    if my_calc(n):
        x = n
        if my_cond(x):
            break
        else:
            while True:
                n = next(my_gen)
                if my_calc(n):
                    x = min(n, x)
                    if my_cond(x):
                        break  
            break

这是更多的代码。 通常,删除前哨值是好的,但必须对上述内容进行评估以确保可维护性

代码的进一步分解给出了以下内容,但是上面的代码保留了更多的原始条件。

while True:
    n = next(my_gen)
    if my_calc(n):
        x = n
        if not my_cond(x):
            while True:
                n = next(my_gen)
                if my_calc(n):
                    x = min(n, x)
                    if my_cond(x):
                        break  
        break

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM