php 反向截取,反向PHP功能
我有一個根據用戶的經驗返回用戶級別的函數.我將如何扭轉這種狀況,以便我可以輸入級別并獲得該級別所需的經驗?
function getLevel($experience)
{
return round ( sqrt( pow($experience, 1.4) - 1.5*$experience +1) /100 );
}
function getExperienceByLevel($level)
{
return ???;
}
到目前為止,這是我使用常規數學所做的.因為我知道$level,所以我希望表達式像$experience = XXXX.
$level = sqrt( pow($experience, 1.4) - 1.5*$experience +1) /100;
$level*100 = sqrt( pow($experience, 1.4) - 1.5*$experience +1);
pow($level*100, 2) = pow($experience, 1.4) - 1.5*$experience + 1;
解決方法:
我們需要在這里做一些代數.級別的公式是
lvl = floor( sqrt( expr^1.4 - 1.5*expr +1) / 100 + 0.5)
向后考慮
lvl = sqrt( expr^1.4 - 1.5*expr +1) / 100 + 0.5
然后
lvl - 0.5 = sqrt( expr^1.4 - 1.5*expr +1) / 100
和
100 * lvl - 50 = sqrt( expr^1.4 - 1.5*expr + 1)
廣場
10000 * lvl^2 - 10000 * lvl + 2500 = expr^1.4 - 1.5*expr + 1
10000 * lvl^2 - 10000 * lvl + 2499 = expr^1.4 - 1.5*expr
現在讓左手邊Q,我們有
expr^1.4 - 1.5*expr = Q
這實際上是一個很難求解的代數方程.忽略線性部分即可得到一個近似值,從而得到更簡單的方程
expr^1.4 = Q
給予
expr = pow(Q, 1/1.4)
這實際上告訴我們,最好用數字方法求解.您也可以構造一個查詢表.一個簡單的方法是
int[] exprForLevel
function generateExprsForLevel() {
curLevel = 1
expForLevel[1] = 0
for(i=0; i< MaxPossibleExperience; ++i) {
lvl = getLevel(i)
if(lvl > curLevel) {
curLevel = lvl
expForLevel[curLevel] = i
}
}
function getExperienceByLevel(level) {
return expForLevel[level]
}
上面的偽代碼效率很低,因為它檢查每個可能的體驗值.如今,計算機的效率相當高,因此您可能會發現它擁有高達數百萬的使用經驗.您可能會發現涉及二進制細分的例程應該更快地收斂到值.
標簽:php,math
來源: https://codeday.me/bug/20191026/1938078.html
總結
以上是生活随笔為你收集整理的php 反向截取,反向PHP功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海底捞的企业文化是什么啊?
- 下一篇: 南华大学红湘校区附近宾馆哪家好一点?