java - 计算除以二的次数

标签 java language-agnostic math

问候。

我有一个 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/

相关文章:

language-agnostic - 如何将好的代码与遗留/怪癖模式代码分开

language-agnostic - 在其他语言中使用时的 bean 模式名称是什么

user-interface - 帮助文件(或用户手册)是否已失效?

javascript - JS : Keyboard input: Disable "8" from inputting when entering "* " (multiply sign)

java stringbuilder删除一行

java - 将计时器添加到 Java Swing

java - 在 JCIP 样本 "Listing 5.19 Memoizer"中,当 ExecutionException 发生时应该删除缓存

java - 为Netbeans(JAVA)项目安装安装程序

javascript - 转换 2 :1 equirectangular panorama to cube map

math - 编程语言如何处理大数算术