我在谷歌上搜索如何查找一个数字y
是否是这个链接的力量x
并遇到这个链接
爪哇
public class Solution { public boolean isPowerOfThree(int n) { return (Math.log10(n) / Math.log10(3)) % 1 == 0; } }
常见的陷阱
这个解决方案是有问题的,因为我们开始使用双精度数,这意味着我们会受到精度错误的影响。这意味着,我们不应该
==
在比较双打时使用。那是因为Math.log10(n) / Math.log10(3)
可能是5.0000001
或的结果4.9999999
。Math.log()
通过使用函数而不是 可以观察到这种效果Math.log10()
。为了解决这个问题,我们需要将结果与
epsilon
.爪哇
return (Math.log(n) / Math.log(3) + epsilon) % 1 <= 2 * epsilon;
那里我不明白return (Math.log(n) / Math.log(3) + epsilon) % 1 <= 2 * epsilon;
那条线是什么意思?
为什么EPSILON
在比较浮点数时使用?