Скажем, у меня есть эти переменные:
m
- это объем памяти, доступный в битах - *, 1007 * - это коэффициент деления
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
должно быть как можно ближе к 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, чтобы найти значения, но должен быть лучший способ.