首页 > 解决方案 > 为什么 math.pow 返回的值与 ** 运算符不同?

问题描述

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

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

给定建筑物的总体积 m。给定 m 你能找到你必须建造的立方体的数量 n 吗?

这是我的代码

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

解决方案


math.pow 总是将它的参数转换为floats first,这只是近似值。

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


推荐阅读