如何解决z =(((m / k)/ j)/ x)x优化z朝向2ˣ

问题描述 投票:-1回答:1

所以说我有这些变量:

  • m是以位为单位的可用内存量
  • k是一个分裂因素
  • j是另一个分裂因子,作为一个单独的变量而不是与k结合
  • x是我们想要弄清楚的价值。
  • z是我们想要最接近2^x的价值

然后我们有

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

例如,假设我们有:

  • m = 2000000
  • k = 5
  • j = 10
  • x = ?
  • z = ?

然后我们有

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

我想弄清楚x是什么,z应尽可能接近x的2。我目前这样做的方法是插入数字并尝试让它们接近匹配。但我想知道以编程方式解决这个问题的通用方法。但是,例如,我可能会尝试插入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来查找值,但是必须有更好的方法。

enter image description here

math equation-solving factoring
1个回答
1
投票

你可以做一个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,但对于这个特殊问题,线性搜索看起来很好。

© www.soinside.com 2019 - 2024. All rights reserved.