看板 RO 關於我們 聯絡資訊
原文吃光光 看了引用的巴哈的那篇文章 覺得不出來講點話似乎有點對不起版眾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 容易達成 (因為跟人有關的事情都會有意外..) 只是打手如果是基因, 少了一些天怒加持 火煙組會丟比較多一些 -- 純屬個人推論 不要起爭議 有爭議 請G社出來面對就搞定 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.45.141.132 ※ 文章網址: https://www.ptt.cc/bbs/RO/M.1464367942.A.ED7.html
yuton: 我記得之前有看過有人經驗獲得兩千多萬的圖 所以我一直覺得 05/28 00:55
yuton: 經驗溢位變負的這原因很奇怪... 05/28 00:56
事實上在我前一篇我就有 PO 過一個人拿 994萬 的圖了 滿團均分鋼琴團 了不起一個人四百多萬而已吧..
wayne80619: 快推文不然人家以為我看不懂 05/28 01:30
AGaulol: 推這篇讓我真的解惑了~ 05/28 02:15
其實只是推論而已, 沒測試過的東西 看看就好XD
usojapan: 我拿過兩千多萬經驗可是是沒均分情況下 05/28 02:55
usojapan: 公會盧恩擋主教幫加給我打經驗全給我 05/28 02:55
600萬*2.5(1+100%DAI+50%書) = 1500萬 經驗鞋10% 神奇幸運帽3% 加倍週 double 加上共同戰鬥經驗.. 找一堆路人甲乙丙丁每個人揍一下 另外合奏經驗加倍不知道有沒有用 總之目前單一魔物擊殺取得的經驗至少可以到3000萬+
Umemiya: 快推文免得被發現看不懂 05/28 03:49
新增懶人包XD
laechan: 你的推論是正確的.修改方法把公式的 *100 放在最後即可 05/28 07:12
laechan: 我管理的mud也有相同問題,也是以該方式解決,缺點就是先除 05/28 07:12
laechan: 再乘100的結果就是後兩位數一定是00(強制百位整數),後來 05/28 07:13
laechan: 有嚐試新的寫法就是計算先用float(可超過32位元),等計算 05/28 07:13
laechan: 完再透過ftoi(浮點→整數函數)變回整數 05/28 07:14
恩 就是會有誤差 其實用 64bit 浮點數運算, 誤差的問題就會好很多了
laechan: 強制百位整數的缺點我認為在獲取經驗值10000以上時可無視 05/28 07:15
laechan: (像10000跟10099對於獲得經驗值的人的等級來說差異可無視 05/28 07:16
可是會有玩家看到數字不對就會就會想罵XDD
laechan: 另一種寫法也試過, n x 100 / m -> ((n x 10)/m) x 10 05/28 07:17
laechan: 括號內的值會先被計算,只要確保 n x 10 絕不會溢位就可 05/28 07:19
認真說來正解是用 64bit 整數算 可以解決 overflow 的問題, 也可以避免浮點數誤差的問題 但是, 就是這個 BUT 1. 其實我的這個推論還沒有被證實XD 2. 其實就算我們在這討論怎麼修改, 該做能做這些修改的人也不是我們
eric0120000: 低調承認看不懂(遮臉…大推用心 05/28 13:29
身為一個遊戲玩家,只要知道這是 BUG 就好了,其他都不重要
elite3010: 這推論合理 雖然還沒遇過XD 05/28 15:48
Willy37952: 想問原PO 經驗+2倍期間 只給1人打這招還是有效嗎 05/29 18:25
Willy37952: 對不起不會自己算(羞~ 05/29 18:25
會爆 ※ 編輯: pcyu16 (114.45.136.66), 06/05/2016 00:46:49