如何求解 z = (((m / k) / j) / x) for x optimizing z towards 2ˣ

How to solve z = (((m / k) / j) / x) for x optimizing z towards 2ˣ

假设我有这些变量:

然后我们有

let z = (((m / k) / j) / x)

例如,假设我们有这个:

然后我们有

let z = ((2000000 / 5) / 10) / x

我想弄清楚 x 是什么,因为 z 应该尽可能接近 2 的 x 次方。我目前这样做的方法是插入数字并尝试使它们接近匹配。但我想知道一种以编程方式解决此问题的通用方法。但例如,我可能会尝试插入 x = 10,它等于:

4000 = ((2000000 / 5) / 10) / 10

然后 2¹⁰ = 1024 接近 4000,但我不知道什么会更接近。尝试 x = 11 给出:

3636 = ((2000000 / 5) / 10) / 11

2¹¹ = 2048,所以x = 11是更好的解决方案。

想知道如何以编程方式解决这个问题。我试图将方程式分解出来,但是我已经有一段时间没有这样做了,所以我不知道。

z = (((m / k) / j) / x)
x * z = (m / k) / j
j * (x * z) = m / k
k * (j * (x * z)) = m
...

现在有点迷茫,不知道如何达到这个目的:

f(k, j) = ... => [ x, z ]

一般来说,我正在尝试弄清楚如何以编程方式求解方程。只看一个实现就可以让我理解而不用太宽泛。

我目前所做的基本上是进入调试器并输入一些 JavaScript 来查找值,但必须有更好的方法。

你可以做一个 iterative search:

x = 1
best_error = infinity
best_x = 0
while True:
   z = (((m / k) / j) / x)
   error = abs(z - pow(2,x))
   if error > best_error
      return best_x
   best_error = error
   best_x = x
   x = x+1

对于其他关系,有更好的方法来选择下一个 x,但对于这个特定问题,线性搜索似乎很好。