小立方函数的正确性

问题描述 投票:0回答:1

我想出的这个函数在什么范围内找到小于整数 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...
,但截断在这种情况下有效,如果是
4.00000...1
,它在
k-1
情况下仍然有效。

我认为,如果对于某些大立方体

c
n > c**3
但由于精度错误而导致
n**(1/3) < c
,那么可能会出错,因此会返回
c-1
而不是
c
。对于巨大的价值
n**(1/3)
将完全关闭。

我也感兴趣是否将

int
替换为
round
。数字的截断总是向下舍入,但四舍五入可以向上舍入到 0.5。

python integer precision
1个回答
0
投票

测试立方体和立方体+1发现这个最小的失败:

n = 84920 ** 3 + 1
print(n)
print(smaller_cube(n))
612392631488001
612370997523559
© www.soinside.com 2019 - 2024. All rights reserved.