Re: [问题] 钢琴经验倒扣

楼主: pcyu16 (._.?)   2016-05-28 00:52:20
原文吃光光
看了引用的巴哈的那篇文章
觉得不出来讲点话似乎有点对不起版众XD
于是再度上浮换气
关于经验值计算的部分, 可以参考我先前的文章 #1JQyc3S_ (RO)
所以这篇文章的重点在于
1. 探讨 RO 经验值计算溢位的现象的相关推论
2. 根据第一点的推论, 简单列出几个会造成经验值溢位的状况给大家参考
首先必须要郑重声明
RO 经验值计算溢位是因为使用浮点数 这件事完全是错的
证据有以下
1. 人物并不会获得非整数的经验值
所有曾经看过经验值取得的游戏资讯 应该都会知道这件事
无论是人物拥有的经验值 或是击倒魔物取得的经验值 都不会有小数点以下的零头
游戏设计不会为了不会出现小数的经验值, 去使用非整数的储存方式
因为 a. 没必要 b. 浮点数运算比整数运算慢 c. 整数运算比较不会有误差问题
写程式的人一定会用整数 原因应该 a >>>>>>> b >> c
2. 32位元浮点数 能够处理的数字范围其实并不会造成溢位的问题
32位元浮点数能表达的数值精确度范围, 大约是 10^-37~10^38
翻译成白话来说 如果使用浮点数运算
就算 RO 出了一只经验值是 10000 只觉醒钢琴总和这么多经验的怪
差不多也只是浮点数能表达的范围的 0.000000000000000000001% 左右
不过使用 32位元浮点数, 会有很恐怖的误差 (但是通常不会导致正负号弄错..)
以上这些都不重要 重点是 不可能是浮点数导致这个问题
至于浮点数如何表达正负数的部分 其实就不是很重要所以不想讲orz...|||
有兴趣的请自己去查..
以下是我个人的推论, 虽然有一点点根据, 不过还是需要测试才能证明
问题是......测试很麻烦, 所以我懒得测 (被揍
第一个推论是溢位的是32位元整数
因为这是很常使用的储存整数用的资料格式
32位元无号整数不会有溢位变负的问题
而64位元整数绝对可以处理我们计算的经验值
第二个推论是溢位的是单一魔物被击杀时, 分配给所有成员的总经验
因为当经验溢位时, 全队都是拿到负经验 (当然, 除了死掉.不在现场.或是没均分之类)
这代表 DAIDAI/吃书 是无辜的, 你不会因为打手或自己有特殊的经验状态而拿到负经验
这个部分, 只要考虑DAIDAI状态跟经验书 都无法让队友获益 应该可以大概理解
第三个推论是最有趣也最重要的, 也就是溢位的标准是 21,474,836
32位元有号正整数上限是 2,147,483,647
而我推论的这个值是这个数字的 1/100, 这当然不是随便凑的
我们有几个已知的钢琴团数字可以参考
1. 12人均分队伍, 全部人碰一下王, 其中一个打手打了极高比率 => 变负的GG
2. 12人均分队伍, 全部人打到王, 两个人约略平均分摊伤害 => 还是正的
3. 12人均分队伍, 只有一个人打到王 => 还是正的
不考虑经验惩罚, 全队经验的部分, 1 大约是 31,069,440
2 大约是 15,534,720
3 大约是 20,044,800
接下来就要讲为什么有那神秘的 1% 标准
我认为那是因为工程师写经验计算, 要避免处理小数, 所以用了一些自己方便的写法
因为虽然人物取得的经验跟魔物击倒的经验都是整数
但是经验书有50%, 经验鞋有10%, 神奇幸运帽还有 3% 这种数字
公式原本应该是 团队获得经验 / 均分人数 * 个人经验倍率
但是实际上写成 团队获得经验 * 100 / 均分人数 * 个人经验倍率%
然后团队获得经验 * 100 造成溢位, 算出来就是负的
而且后面有经验书跟 DAIDAI 还会负更多...
根据这个推论, 以下列出几个钢琴团满团均分可能会造成问题的状况
1. 打手只有一名, 包含打手有超过三人打到王
2. 打手超过一名, 所有人都有碰到王, 但是其中一人打造成超过69.1%以上伤害
有兴趣的人可以拿以上两点来做实验..
尤其如果第二点证明是正确的, 那就保证我猜的是对的...
另外还有一个有趣的地方, 就是如果我说的没错, 而且这个问题之后没有(打算)修正
以后就不会出经验卡装增加幅度单位是百分比, 然后值还有小数点的 (例如说2.5%)
最后我想说, 这很明显是 BUG, 而且严重影响游戏体验
等到回归原厂之后, 寄信寄爆G社 或许就有机会修了
END 懒人包
1. 就是 BUG, 而且还是每天大家都可能遇到的 BUG, 只能等原厂解
2. 满团均分钢琴, 打手最好能找两个, 不要让有人打到 70% 以上伤害
3. 只有一个打手的时候
a. 除了打手之外其他最好都不要打 (因为超过三个人打到就可能会溢位了..)
b. 大家努力打, 分摊掉钢琴30%HP的伤害 (大约是565万HP)
其实 3.b 比 3.a 容易达成 (因为跟人有关的事情都会有意外..)
只是打手如果是基因, 少了一些天怒加持 火烟组会丢比较多一些
作者: yuton (油桶)   2016-05-28 00:55:00
我记得之前有看过有人经验获得两千多万的图 所以我一直觉得经验溢位变负的这原因很奇怪...
作者: wayne80619 (wayne)   2016-05-28 01:30:00
快推文不然人家以为我看不懂
作者: AGaulol (AGaulol)   2016-05-28 02:15:00
推这篇让我真的解惑了~
作者: usojapan (小龟)   2016-05-28 02:55:00
我拿过两千多万经验可是是没均分情况下公会卢恩挡主教帮加给我打经验全给我
作者: Umemiya (ㄨㄇㄨㄇㄇ)   2016-05-28 03:49:00
快推文免得被发现看不懂
作者: laechan (挥泪斩马云)   2016-05-28 07:12:00
你的推论是正确的.修改方法把公式的 *100 放在最后即可我管理的mud也有相同问题,也是以该方式解决,缺点就是先除再乘100的结果就是后两位数一定是00(强制百位整数),后来有尝试新的写法就是计算先用float(可超过32位元),等计算完再透过ftoi(浮点→整数函数)变回整数
作者: eric0120000 (小e)   2016-05-28 13:29:00
低调承认看不懂(遮脸…大推用心
作者: elite3010 (客房服务)   2016-05-28 15:48:00
这推论合理 虽然还没遇过XD
作者: Willy37952 (~Willy~)   2016-05-29 18:25:00
想问原PO 经验+2倍期间 只给1人打这招还是有效吗对不起不会自己算(羞~

Links booklink

Contact Us: admin [ a t ] ucptt.com