gpt4 book ai didi

javascript - 求方程的逆运算 - JavaScript

转载 作者:行者123 更新时间:2023-12-03 01:54:37 27 4
gpt4 key购买 nike

假设我有这个公式,例如:

function getExperience(level) {
let a = 0;
for (let x = 1; x < level; x += 1) {
a += Math.floor(x + (200 * (2 ** (x / 3))));
}

return Math.floor(a / 4);
}


for (var i = 1; i < 100; i++) {
console.log(`Level ${i}: ${getExperience(i)}`);
}

要获得 50 级所需的经验,您需要执行以下操作:getExperience(50)

但是,您将如何扭转这一局面并获得经验所需的级别?因此,getLevel(20010272) 将输出 50

最佳答案

简短回答

您可以使用 4.328085 * Math.log(0.00519842 * xp + 1.259921045) 作为相应级别的非常好的近似值。

如果您需要精确值,您可以迭代所有级别,直到找到所需的范围,如 answer 所示。 .

长答案

稍微修改了功能

我认为不可能找到准确的,closed-form expression为该函数的反函数。不过,如果您稍微修改一下 getExperience(level) 应该是可能的。

  • 首先,您可以注意到 x 的增长速度比 2 ** (x/3) 慢得多。
  • 那么,Math.floor 对大数没有太大影响。

所以让我们删除它们!这是稍微修改过的函数:

function getExperienceEstimate(level) {
let a = 0;
for (let x = 1; x < level; x += 1) {
a += 200 * (2 ** (x / 3));
}
return a / 4;
}

这个方法的优点是现在是geometric series ,因此可以计算总和 directly ,没有任何循环:

function getExperienceEstimate(level) {
let a = 50;
let r = 2 ** (1 / 3);
return a * (r**level - r) / (r - 1);
};

getExperienceEstimate(50) 返回 20011971.993575357,仅比 getExperience(50) 小 0.0015%。

反函数

根据Wolfram Alpha ,这是 getExperienceEstimate 的反函数:

function getLevelEstimate(xp){
let a = 50;
let r = 2 ** (1 / 3);
return Math.log(xp * (r - 1) / a + r) / Math.log(r);
};

有一些轻微的精度损失,您可以进一步简化它:

function getLevelEstimate(xp){
return 4.328085 * Math.log(0.00519842 * xp + 1.259921045)
};

这只是一个估计,但效果很好并且不需要任何循环!

测试

对于 20012272 XP,近似反函数返回 50.00006263463371,如果您想找到精确的结果,这应该是一个很好的起点。

function getExperience(level) {
let a = 0;
for (let x = 1; x < level; x += 1) {
a += Math.floor(x + (200 * (2 ** (x / 3))));
}
return Math.floor(a / 4);
}

function getLevelEstimate(xp){
return 4.328085 * Math.log(0.00519842 * xp + 1.259921045)
};

for (var i = 1; i < 100; i++) {
console.log(`Level ${i} (XP = ${getExperience(i)}). Estimated level : ${getLevelEstimate(getExperience(i))}`);
}

关于javascript - 求方程的逆运算 - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54434757/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com