java对数算法
我需要计算任意基数的对数,这无关紧要,精确到一定程度。这有算法吗?我用Java编程,所以我对Java代码很在行
How to find a binary logarithm very fast? (O(1) at best)也许能回答我的问题,但我不明白。能否澄清
你可以在下面搜索框中键入要查询的问题!
我需要计算任意基数的对数,这无关紧要,精确到一定程度。这有算法吗?我用Java编程,所以我对Java代码很在行
How to find a binary logarithm very fast? (O(1) at best)也许能回答我的问题,但我不明白。能否澄清
# 1 楼答案
使用此标识:
其中
log
可以是任意基数的对数函数,n
是数字,b
是基数。例如,在Java中,以2为底的对数为256:顺便说一下,^{} 使用base} ,它使用base
e
。还有^{10
# 2 楼答案
我知道这已经非常晚了,但这可能会对一些人有用,因为这里的问题是精确性。实现这一点的一种方法实际上是实现一个根查找算法,该算法从基础上使用您可能希望使用的高精度类型,包括简单的+-x/操作
我建议实施牛顿的理论方法,因为它需要相对较少的迭代,并且具有很大的收敛性。具体地说,对于这类应用程序,我认为如果实现了良好的输入验证,它将始终提供正确的结果是公平的
考虑一个简单常数“a”,其中
如果a被寻求解决,使其服从,那么
我们可以迭代地使用Newton method来查找任何指定公差内的“a”,其中每个a-ith迭代都可以通过
分母是
因为这是函数的一阶导数,对于牛顿法来说是必要的。一旦解决了这个问题,“a”就是“a=log,b(x)”问题的直接答案,可以通过简单的+-x/操作获得,所以您已经可以开始了。“等等,但是那里有电源吗?”。对如果你可以相信你的能量函数足够精确,那么继续使用它就没有问题了。否则,您可以使用these methods将幂运算进一步分解为一系列其他+-x/运算,从而将幂上的任何十进制数简化为两个整数幂运算,这两个整数幂运算可以通过一系列乘法运算轻松计算。这个过程最终会给你留下N个根,你也可以用牛顿法找到。如果你沿着这条路走下去,你可以用牛顿法
如你所见,必须递归求解,直到你达到b=1
唷,但是的,就是这样。这是通过确保在整个过程中仅使用+-x/操作使用高精度类型来解决问题的方法。下面是我在Excel中快速实现的日志2(3),与软件原始功能给出的解决方案相比。正如你所看到的,我可以通过监视优化函数给我的结果,不断细化“a”,直到达到我想要的公差。在本文中,我使用了a=2作为初始猜测,您可以使用它,并且在大多数情况下应该可以使用它