【问题标题】:Why is math.pow returning different values than the ** operator? [duplicate]为什么 math.pow 返回的值与 ** 运算符不同? [复制]
【发布时间】:2019-12-14 14:30:16
【问题描述】:

我一直在尝试解决这个问题:

底部的立方体的体积为 n^3,上面的立方体将 有 (n-1)^3 的体积,依此类推,直到顶部有 1^3 的音量。

给定建筑物的总体积 m。被给予 m 可以 你找到了你必须构建的立方体的数量吗?

这是我的代码

import math

def find_nb(m):

nb = 1
nb_vol = 0

while True:
    nb_vol += math.pow(nb, 3)

    if (nb_vol == m):
        return nb
    elif (nb_vol > m):
        return -1

    nb += 1

现在,当我尝试求解 find_nb(2521115597681328384) 时,它返回 -1,而实际上它应该返回 56352。如果我改变

nb_vol += math.pow(nb, 3)

nb_vol += nb ** 3

一切正常。 为什么?

【问题讨论】:

标签: python


【解决方案1】:

math.powalways converts it’s arguments to floats first,这只是近似值。

** 运算符使用永远不会溢出的整数,这意味着它总是给出正确的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 2015-01-31
    • 2023-03-03
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    相关资源
    最近更新 更多