python - 为什么 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
一切正常。为什么?
解决方案
math.pow
总是将它的参数转换为float
s first,这只是近似值。
运算符使用永远不会溢出的**
整数,这意味着它总是给出正确的结果。
推荐阅读
- python - Python setuptools:将脚本安装为符号链接?
- asp.net-web-api - 在执行当前 Web 请求期间不断出现未处理的异常
- java - 使用一元运算符时出现意外类型错误 --
- reactjs - 更改收音机输入时如何更改标签的样式?
- informix - 带括号和不带括号含义的 Imformix sql 'outer'
- python-3.x - pyodbc 执行两个依赖过程
- angular - Angular HTTPClient 更改了响应数据中的指定字符串
- ruby-on-rails - 从 ssh 私有 EC2 我无法连接到我的 aws RDS Postgres 数据库
- reactjs - 如何在 React-native 的其他文件中导航到其他导航器中的页面?
- reactjs - FetchError:无效的 json 响应正文在 .. 位置 0 的 JSON 中的意外令牌 <