问题出在标题中,例如我担心的是:
如果我计算math.ceil(math.log(4,2))
,我是否有可能获得3而不是2,因为日志将返回2.0000000000000343而不是2.0?
我怀疑没有,但我还没找到确认的东西!
答案 0 :(得分:2)
是。您可以为许多math.ceil(math.log(x**y,x))
对计算(x,y)
,直到它不等于y
:
>>> next((x,y) for x in range(2,100) for y in range(2,100) if y != math.ceil(math.log(x**y,x)))
(2, 29)
>>> '%.30f' % math.log(2**29,2)
'29.000000000000003552713678800501'
>>> math.ceil(math.log(2**29,2))
30.0
要避免此问题,您只需使用round()
代替math.ceil
。
(2,29)
只是第一对有问题的一对:
[(2, 29), (2, 31), (2, 39), (2, 47), (2, 51), (2, 55), (2, 58), (2, 59), (2, 62), (2, 93), (4, 29), (4, 31), (4, 93), (5, 3), (5, 6), (5, 12), (5, 13), (5, 17), (5, 21), ...