为什么math.pow返回的值不同于**运算符?

时间:2019-12-14 14:30:16

标签: python

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

  

底部的立方体的体积为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

一切正常。 为什么?

1 个答案:

答案 0 :(得分:0)

math.pow always converts it’s arguments to floats first,这只是一个近似值。

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