python - 处理 Python 数学运算的准确性

标签 python

我试图编写一个简单的程序来确定输入整数是否为 2 的幂。

我有以下代码。它将无法通过 n=536870912 的测试用例(5368709122^29)。

我尝试格式化数字,format(y,'12g') 输出接近 0 但不等于 0 , 3.43965 e-07

我应该如何克服这个数字问题?

    s= math.log(n,2)
    [sh,y]=divmod(s,1)

    if y!=0:
    #if format(yu,'20f')!=format(0,'20f') :
        return False
    else:
        return True

最佳答案

如果您想比较 float 并允许一点 float 不准确,您通常会检查它们是否在彼此允许的特定距离内 (if abs(x-y) < epsilon)。

但是,如果您想知道一个整数 是否是 2 的幂,您可以这样做:

def ispoweroftwo(n):
    return (n>0 and (n&-n)==n)

这根据 two's complement 的规则工作有符号数的表示。

>>> ispoweroftwo(536870911)
False
>>> ispoweroftwo(536870912)
True

关于python - 处理 Python 数学运算的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37563797/

相关文章:

python - 有哪些仅支持 Python 的 HTTP/1.1 Web 服务器可用?

python - 将简单标记的结果放入变量中

python - 从 tastypie uri 获取模型对象?

python - 尝试从 pygame hello world 创建 Mac OS X 应用程序

python - 在 python 中处理任意大的数字

python - 如何在分类数据上使用 seaborn 获取条形图上的标签值

python - 如何在不安装的情况下使用打包的Python包

python - 如何在循环中使用 os.pipe() (复制多个管道)?

python - 如何将 Pandas 中的列转换为行?

python - 使用 iris 示例加载 csv 时 tensorflow 的值错误