有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 1 楼答案

    使用此标识:

    logb(n) = loge(n) / loge(b)

    其中log可以是任意基数的对数函数,n是数字,b是基数。例如,在Java中,以2为底的对数为256:

    Math.log(256) / Math.log(2)
    => 8.0
    

    顺便说一下,^{}使用basee。还有^{},它使用base 10

  2. # 2 楼答案

    我知道这已经非常晚了,但这可能会对一些人有用,因为这里的问题是精确性。实现这一点的一种方法实际上是实现一个根查找算法,该算法从基础上使用您可能希望使用的高精度类型,包括简单的+-x/操作

    我建议实施牛顿的理论​方法,因为它需要相对较少的迭代,并且具有很大的收敛性。具体地说,对于这类应用程序,我认为如果实现了良好的输入验证,它将始终提供正确的结果是公平的

    考虑一个简单常数“a”,其中 log_b(x) = a

    如果a被寻求解决,使其服从,那么 x - b^a = 0

    我们可以迭代地使用Newton method来查找任何指定公差内的“a”,其中每个a-ith迭代都可以通过 a_i = a_{i-1} - \frac{x - b^a}{-ab^{a-1}}

    分母是

    -ab^{a-1} = \frac{\partial}{\partial a}

    因为这是函数的一阶导数,对于牛顿法来说是必要的。一旦解决了这个问题,“a”就是“a=log,b(x)”问题的直接答案,可以通过简单的+-x/操作获得,所以您已经可以开始了。“等等,但是那里有电源吗?”。对如果你可以相信你的能量函数足够精确,那么继续使用它就没有问题了。否则,您可以使用these methods将幂运算进一步分解为一系列其他+-x/运算,从而将幂上的任何十进制数简化为两个整数幂运算,这两个整数幂运算可以通过一系列乘法运算轻松计算。这个过程最终会给你留下N个根,你也可以用牛顿法找到。如果你沿着这条路走下去,你可以用牛顿法

    \frac{\partial (\sqrt[b]{x})}{\partial x} = \frac{\sqrt[b]{x}}{bx}

    如你所见,必须递归求解,直到你达到b=1

    唷,但是的,就是这样。这是通过确保在整个过程中仅使用+-x/操作使用高精度类型来解决问题的方法。下面是我在Excel中快速实现的日志2(3),与软件原始功能给出的解决方案相比。正如你所看到的,我可以通过监视优化函数给我的结果,不断细化“a”,直到达到我想要的公差。在本文中,我使用了a=2作为初始猜测,您可以使用它,并且在大多数情况下应该可以使用它

    Newton method for the solution of a log operation