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

Python 为什么math.pow返回的值与**运算符不同?,python,Python,我一直在努力解决这个问题: 底部的立方体体积为n^3,上面的立方体体积为 体积为(n-1)^3,依此类推,直到顶部有一个 体积为1^3 您将获得建筑物的总体积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 e

我一直在努力解决这个问题:

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

您将获得建筑物的总体积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)

一切正常为什么?

math.pow
,它们只是近似值

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

math.pow
,这只是近似值


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

这是否回答了您的问题@Reznik这个问题更多的是关于性能而不是正确性。为了完整性,请到这里检查两个浮点数是否足够接近,可以称为相等@匿名。问题本身回答了这个问题。这是否回答了您的问题@Reznik这个问题更多的是关于性能而不是正确性。为了完整性,请到这里检查两个浮点数是否足够接近,可以称为equal@Anonymous。问题本身回答了这个问题。
nb_vol += nb ** 3