【问题标题】:Python Math significance levelPython数学显着性水平
【发布时间】:2013-01-27 07:25:35
【问题描述】:

我从一个数据集中加载了 2 个值。

x1=5.904e-16

x1=1.048576e-14

虽然这些数字很小,但我想做的只是平均它们。

avg = 1/2*(x1+x2)

但这给出了 avg = 0

啊!

【问题讨论】:

    标签: python math significant-digits


    【解决方案1】:

    我假设您使用的是 Python 2。

    当两个参数都是整数时,Python 2 使用整数除法,这意味着结果也将是整数。例如:

    print 1/2
    # 0
    print 5/2
    # 2
    

    要克服这个问题,要么使用等效的浮点数 (0.5),要么将除法的参数之一(12,没关系)更改为浮点数,这样它就会也返回一个浮点数。

    print 1.0/2
    # 0.5
    print 1/2.0
    # 0.5
    print 1.0/2.0
    # 0.5
    

    您也可以像 nneonneo mentioned 一样将总和直接放入除法中,如下所示:

    (x1+x2)/2.0
    

    这也将产生预期的结果。

    【讨论】:

    • 或者,更简单的,(x1+x2)/2.0
    【解决方案2】:
    avg = 0.5*(x1+x2)
    

    之所以起作用,是因为在 python 中 1/2 显然不等于 0.5,但不,它认为 1/2 是二分之一,并且任何一个都没有超过小数点的值,所以它假设你不关心想要那个。

    【讨论】:

    • 1/2 在 Python 2.x(以及 C 和许多其他类似语言)中计算为 0为什么?试图进一步解释是没有意义的。
    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 2023-03-30
    • 2015-07-11
    • 2022-06-14
    • 2022-07-25
    • 2016-05-20
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多