计算除以2的次数

Ron*_*nis 6 java language-agnostic math

问候.

我有一个我觉得很贵的java方法,我试图用数学表达式替换它的一些调用.问题是,我吮吸数学.我的意思是真的很糟糕.

以下应该解释我试图利用的模式.

f(x)   -> y
f(x*2) -> f(x)+1
Run Code Online (Sandbox Code Playgroud)

也就是说,每当我将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
Run Code Online (Sandbox Code Playgroud)

我目前的做法是蛮力.我循环遍历X并测试在我达到5之前我可以将它减半的次数,最后我添加6.这样做并且比调用原始方法更快.但我一直在寻找一种更"优雅"或更便宜的解决方案.

接受的答案是那个设法帮助我但没有指出我是多么愚蠢的人:)

(标题可能很糟糕,因为我不知道我在找什么)

Tho*_*sen 6

你是否认为你所看到的基本上是除以五,找到你有两个的力量,并为这个力量加6?

"给定Y找出X的强大功能"的一般方法是使用对数.使用计算器尝试将日志64除以日志2,看看你得到6.

所以 - 除以5,取日志,除以2的对数,然后加6.