- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有这个公式,例如:
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/
这个问题在这里已经有了答案: Convert hashtable back to string data in efficient way (1 个回答) 关闭 2 年前。 我找到了以下代码,用于从
我是一名优秀的程序员,十分优秀!