问候。
我有一个 java 方法,我认为它很昂贵,我正在尝试用数学表达式替换对它的一些调用。问题是,我数学很烂。我的意思是真的糟透了。
下面应该解释我试图利用的模式。
f(x) -> y
f(x*2) -> f(x)+1
也就是说,每当我将 x 的值加倍时,y 的值将比 x/2 大 1。 以下是一些示例输出:
f(5) -> 6
f(10) -> 7
f(20) -> 8
f(40) -> 9
f(80) -> 10
f(160) -> 11
f(320) -> 12
我目前的方法是蛮力。我在 X 上循环并测试在达到 5 之前我可以将它减半多少次,最后我添加 6。这有效并且比对原始方法的调用更快。但我一直在寻找更“优雅”或可能更便宜的解决方案。
接受的答案是那些设法帮助我而没有指出我有多愚蠢的人:)
(标题可能很烂,因为我不知道我在找什么)
最佳答案
您是否考虑过,您所看到的本质上是除以 5,求出您拥有的 2 的多少次方,然后在该次方的基础上加上 6?
“给定 Y 找出 X 的幂”的一般方法是使用对数。使用计算器尝试将 64 的对数除以 2 的对数,看看得到 6。
所以 - 除以五,取对数,除以二的对数,然后加六。
关于java - 计算除以二的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4488389/