You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

smaller_cube函数有效范围探讨及int替换round的效果分析

寻找小于整数n的最大立方数函数分析

我写了一个函数smaller_cube,用来找出小于整数n的最大立方数,代码如下:

def smaller_cube(n):
    k = int(n**(1/3)) 
    return k**3 if k**3 < n else (k-1)**3

现有代码的工作逻辑

  • 比如计算64**(1/3)时,浮点数运算结果是3.99999...,用int()截断后得到3,此时3**3=27 < 64,返回27,符合“小于64的最大立方数”的要求。
  • 如果某个数的立方根计算结果是4.00000...1(比如n略大于64),int()截断后得到4,4**3=64 < n,返回64;若n刚好等于64,此时4**3=64不小于n,会触发(k-1)**3分支返回27,同样符合需求。

存在的精度问题

当n是极大的整数时,浮点数计算n**(1/3)会出现精度丢失:

  • 假设存在立方数c³,且n > c³,但由于精度误差,n**(1/3)的计算结果小于c,此时int()截断后得到c-1,函数会返回(c-1)**3,而正确结果应该是c³。
  • 当n大到一定程度,n**(1/3)的计算会完全失准,连近似的整数部分都得不到,直接导致函数输出错误结果。

替换int为round的效果

  • 原代码中int()是直接截断小数部分,始终向下取整;round()则是根据小数部分判断,0.5及以上向上取整,否则向下取整。
  • 替换后,对于立方根计算结果接近整数的情况,比如c³的立方根计算为c-0.4,round会得到c,此时若c³ >=n,会返回(c-1)**3;若计算结果是c+0.4,round得到c,c³ <n则返回正确结果。
  • 但这种替换无法解决大数的精度问题,反而可能在边界情况引入新错误:比如n略大于c³,但立方根计算为c-0.5,round后得到c-1,函数会返回(c-1)**3,而正确结果应该是c³。

内容的提问来源于stack exchange,提问作者qwr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:33:24