新版附魔素材消耗真正算法(魔法书算素材消耗存在微小误差的原因)
修改于2021/02/052204 浏览攻略
我们其实经常会发现,我们使用布偶的魔法书计算附魔素材消耗的结果和实际结果有的时候差了那么一丢丢,虽然不多,但是总是看着不太舒服。所以我昨天稍微研究了一下其中存在的问题,从而得出了我这套算法。
先说结论,我把我的观点概括为三个原则:
原则一:分级计算原则
与潜力计算不同,对于素材计算,无论附魔一次性拉多少,都会拆成不同级分别计算素材消耗,每一级都会单独取整,最后相加。
例如:把暴击伤害从+1拉到+4,会分成三段计算:+1~+2消耗的素材、+2~+3消耗的素材、+3~+4消耗的素材,每一段的结果都要取整,最后再相加。
原则二:级数计算原则
分级后,我们给每一级指定一个“级数”(此级数非彼级数。。)
简单点说,附+3~+4的这一级的级数为4(称之为第4级),退-3~-4这一级也是第4级。
原则三:级内计算原则——两次取整
接下来计算每一级素材消耗。
众所周知,锻造等级可以减少附魔素材消耗。
假设因为锻造等级关系减少的素材消耗的比例为A%,有:
对于第N级的一次附魔的素材消耗:
(1) 先计算原素材消耗:
原耗材=[ 基础素材消耗* N^2 ]
(2) 再考虑锻造等级的素材减少:
实际耗材=[ 原耗材* (1-A%) ]
其中基础素材消耗可以查表得到(千矢的攻略里面有)。
注意这里的 [ ] 符号是向下取整的意思(在这里也就是舍去小数点的意思)。
也就是说,先计算基本的素材的消耗,算完之后会立刻取整。取完整之后,才进行素材消耗减少的比例的计算,最后再取整。
中间经历了两次取整的过程(我估摸着,大概是因为做游戏的程序员不想改了,直接在以前的素材消耗的结果的基础后面加了一项,用来计算素材减少,所以才有这种福利..)。
魔法书之所以有的时候会差那么一丢丢,就是因为缺少了在计算素材减少前要进行取整的步骤。(也就是说,算出的结果会偏大,不过也就差那么几pt...)
------------------------
【例1】
已知我的锻造等级是161(相当于是减少19%的素材消耗)
出现了如下的情景:

很神奇吧,是不是很好奇为什么不需要素材pt。
原因很简单。攻击速度附魔的基础素材消耗是1.5pt,附第1级的时候:
原耗材=1.5pt*1^2=1.5pt
但这个时候因为中间有一次取整运算,素材消耗就舍去了小数点后的值,变成了1pt,然后这才进行锻造等级的素材减少判定
实际耗材=1pt*(1-19%)=0.81pt。
最后又经过一次取整,就变成0pt了。
-----------------------
【例2】
然后我们拿刚刚附魔好的木剑(aspd+1)
我们一次性退成aspd-1

我们发现,还是不需要消耗。这是因为分级计算的原则,先计算+1~+0,再计算+0~-1,根据刚刚例1的计算,两步消耗的素材都为0,所以最后素材消耗还是为0。
-----------------------
【证明过程】
结论讲完了,我简要说说我的证明过程。
先对魔法书的算法进行模拟,与实际的消耗进行对照:
实验条件:锻造等级161(19%减素材),对暴击伤害进行计算

这一套算法,最后是直接对原消耗这一列计算素材的减少量,再取整,也就是魔法书的算法(右边这一列取整的结果)。对比实际附魔的单步素材消耗,呈现非线性的误差(绿色部分)。最后实际结果也有5pt的偏差(下面的红字)。
而如果按照我的算法,对中间原消耗进行取整再计算,结论如下:

可以观察到,右边取整这一列与实际单步消耗完全一致,说明先对原消耗取整再进行素材减少的计算很可能才是正确的算法。
同样地,我还对其他几个有差异的属性做了单独的计算,都证明了我的算法的正确性。
摆上图,就不解释了。




-----------------------
【一些原有的实验猜想及排除】
1. 有没有可能是因为我的锻造等级为161,所以产生差异?
A:我把等级练到162,结论不变,说明不是锻造等级不整十的问题。
2. 有没有可能是因为实际基础耗材不是正好为16.5而导致的误差?
A:首先理论上可能性小,因为非线性程度没有规律,而且他们做游戏的也没有理由故意弄个很难的小数或者分数,自己麻烦自己。。其次,也可以计算验证:
我可以假设可以通过基础耗材调整达到目的。
当基础耗材为16.499时。

如果是因为基础耗材导致的问题,那么可以取适当的基础值,使0熟练度和160熟练度都符合实际情况。但是实际情况是,如果调整为16.499,0熟练度时偏小,160熟练度时偏大,而改变基础消耗只能使素材消耗向相同方向变化(要么同时变大,要么同时变小)所以,按照原来的算法,不存在可以同时满足0熟练度和160熟练度的基础耗材。因此可以得出结论:并不是基础耗材有问题,是原来的算法有问题。