Re: [閒聊] max damage 的最大值

看板ToS作者 (HW)時間7年前 (2018/08/22 14:13), 7年前編輯推噓42(42029)
留言71則, 38人參與, 7年前最新討論串2/2 (看更多)
手機回文 印象中好像在板上看過不少次相關討論了 覺得好像可以來簡易科普一下 不知道發了會不會有點掃興,不過還是簡介一下 關於算術這件事情,其實就理論而言都很理想跟直觀 但真的牽扯到實作的時候,就會衍生很多細節 先來簡單舉個例子: 假設現在要做算術運算,而你只有一張紙 上面只有10個格子,而且你只能寫下0-9 最直觀的方法就是寫下多少就是對應的十位數整數 然後此時就可以推論出一些限制: 1. 範圍為0-9999999999的整數 然後就會問說,那負的怎麼辦? 所以我們把第一格寫1表示負0表示正 於是範圍變成 -999999999~999999999 雖然可以表示負數了,但最大值也被壓縮 但可能目前實務上不太可能超出上下界 於是乎開發人員就這麼決定了表示式 而過了好幾年,數字運算上開始會有超出範圍的需求 可能就會有人提出建議 「用科學記號不就好了,國中沒畢業嗎?」 好的,於是我們改變表示式的定義: 前八碼為科學記號前面的數字,後兩碼為10的次方 比方說 1 2 3 4 5 6 7 8 9 9 表示 1.2345678 * 10^99 若是有負的需求就再讓一格,而這樣改進以後 上下界的範圍被大大提升了,感謝這位聰明的先知 其實類似的概念就是變數型態裡面的浮點數 而為什麼這麼簡單的道理人家卻不採用呢? 現在我們回來思考一個問題: 以上述例子而言,表示式是怎麼對應到值域內的? 十個格子,無論怎麼表示,都最多只能表示100億個數字 而只有整數表示是可以在範圍內全部列舉的 這也是浮點數運算一個危險的地方,精準度 對電腦運算上,(1e50+1) - (1e50) 答案可能不會是 1 通常浮點數也是拿來算個近似值而已 以算傷害的需求而言我想並不太適當 最後做個總結: 1. 數值運算有上下界是因為實作限制 2. 整數運算較具有精準性 但回歸目前的使用狀況,要能不怕超出範圍也不是不可能 定義一個變數型態,然後覆寫四則運算及比較邏輯 讓它可以動態擴張自己的記憶體大小應該就可以達成 畢竟怪的血量目前不會超出int的範疇,而是否打死也只是一個比較邏輯而已 ----- Sent from JPTT on my Google Pixel 2. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 117.19.226.165 ※ 文章網址: https://www.ptt.cc/bbs/ToS/M.1534918416.A.2FF.html

08/22 14:19, 7年前 , 1F
如果傷害沒有膨脹這麼多應該比較不會有這種問題
08/22 14:19, 1F

08/22 14:22, 7年前 , 2F
好像在看我同事的code review 長篇大論一長串(讚美)
08/22 14:22, 2F

08/22 14:34, 7年前 , 3F
推一個 不然別人以為我看不懂
08/22 14:34, 3F

08/22 14:42, 7年前 , 4F
長知識了
08/22 14:42, 4F

08/22 14:53, 7年前 , 5F
我是覺得不錯啦樓下怎麼看
08/22 14:53, 5F

08/22 15:01, 7年前 , 6F
所以為什麼要用int而不用跟實際傷害顯示一樣的code
08/22 15:01, 6F
就用int去存阿,不懂你的問題....

08/22 15:01, 7年前 , 7F
我幫樓下問有沒有文組版本
08/22 15:01, 7F

08/22 15:07, 7年前 , 8F
推一個假裝自己看得懂
08/22 15:07, 8F
※ 編輯: tony123930 (117.19.226.165), 08/22/2018 15:17:46

08/22 15:22, 7年前 , 9F
嗯嗯,跟我想的差不多
08/22 15:22, 9F

08/22 15:22, 7年前 , 10F
他是說小字已經可以顯示超過21e,max damage卻還是用int
08/22 15:22, 10F

08/22 15:24, 7年前 , 11F
長姿勢了!!
08/22 15:24, 11F

08/22 15:30, 7年前 , 12F
文組問個,為啥堅持要用int 不用long long之類的
08/22 15:30, 12F
先回答這個,根據我多年來研究程式心理學 我想答案很簡單: 沒為什麼,也不是堅持 就只是一開始用int去存而已 然後後面code一多就改不太動了 所謂的歷史共業 以往還可以說int記憶體需求比較少,效能會比較好 但在現在一堆硬體效能過剩的時代已經沒說服力了 ※ 編輯: tony123930 (117.19.226.165), 08/22/2018 15:37:27

08/22 15:41, 7年前 , 13F
跟資源規劃有點關係,傷害值的資料型態在非常早期就
08/22 15:41, 13F

08/22 15:41, 7年前 , 14F
必須決定,那時無法預測傷害的範圍,為了不知多遠的
08/22 15:41, 14F

08/22 15:41, 7年前 , 15F
將來(誰知道這遊戲活這麼久?)先把傷害值的資料型態
08/22 15:41, 15F

08/22 15:41, 7年前 , 16F
調整成 long 甚至更大範圍,只是浪費手機的資源而已
08/22 15:41, 16F

08/22 15:41, 7年前 , 17F
,因為即使數字很小,花費的空間都是相同的。極端一
08/22 15:41, 17F

08/22 15:41, 7年前 , 18F
點來說,甚至有可能因為這樣的資源浪費,造成某些較
08/22 15:41, 18F

08/22 15:41, 7年前 , 19F
低階的手機無法進行遊戲。
08/22 15:41, 19F

08/22 15:45, 7年前 , 20F
以一個大型project來說,底層的code基本都沒什麼人想
08/22 15:45, 20F

08/22 15:45, 7年前 , 21F
動,因為很容易搞出大問題,比較經典的例子,應該是W
08/22 15:45, 21F

08/22 15:45, 7年前 , 22F
oW(魔獸世界)的16格包包問題,有興趣的話可以查查看
08/22 15:45, 22F

08/22 15:45, 7年前 , 23F
08/22 15:45, 23F
其實需求只是要傷害變數需要更大,只有幾個變數改一下應該還好啦 而且我不覺得這個會造成多大的資源影響 大多都是區域變數,是可以回收的

08/22 15:45, 7年前 , 24F
自己寫個物件然後overload實作operator = =?
08/22 15:45, 24F
用cpp宣告一個class,裡面存一個vector之類的 然後實作operator,麻煩的地方應該是在進位的部分 至於比較可以把參數設定為int,原本的code就可以維持原樣 只有需要超過int的才需要修改型態

08/22 15:47, 7年前 , 25F
會造成這樣的原因很簡單 code不是一個人maintain的
08/22 15:47, 25F
我覺得這個才是主因,他們的code八成很亂吧 再加上這幾年來人可能來來去去的 有時候要找屎code的始作俑者可能都不可考了

08/22 15:47, 7年前 , 26F
有些東西就是牽扯太多不好改
08/22 15:47, 26F

08/22 15:50, 7年前 , 27F
因為不同資料型態之間運算容易出錯,能避免是最好
08/22 15:50, 27F

08/22 15:58, 7年前 , 28F
沒錯,你把我想講的全部講完了
08/22 15:58, 28F

08/22 16:16, 7年前 , 29F
推專業
08/22 16:16, 29F

08/22 16:22, 7年前 , 30F
快推免得别人以為我們看不懂
08/22 16:22, 30F

08/22 16:56, 7年前 , 31F
應該很快就會有21億血量的怪,然後21億的防禦,再無視破防..
08/22 16:56, 31F

08/22 17:06, 7年前 , 32F
假借科普 偷鞭科學記號
08/22 17:06, 32F

08/22 17:12, 7年前 , 33F
英文系畢業表示完全看不懂
08/22 17:12, 33F
※ 編輯: tony123930 (101.11.41.118), 08/22/2018 17:23:02

08/22 17:19, 7年前 , 34F
無視破防? 傷害盾不就是了嗎?
08/22 17:19, 34F

08/22 17:48, 7年前 , 35F
不太一樣。防禦力是牆(低於防禦傷害為0),傷害盾是比例弱化
08/22 17:48, 35F

08/22 17:57, 7年前 , 36F
資工系大一C語言就教了
08/22 17:57, 36F
※ 編輯: tony123930 (101.11.41.118), 08/22/2018 18:08:13

08/22 18:16, 7年前 , 37F
推 不明覺厲
08/22 18:16, 37F

08/22 18:26, 7年前 , 38F
好奇這種手遊都是用C實作的嗎?我學的code很多都不用
08/22 18:26, 38F

08/22 18:26, 7年前 , 39F
自己宣告變數型態
08/22 18:26, 39F
我印象中他們用的是unity,我沒用過 但我之前用過其他開發框架玩過,是用cpp寫的 ※ 編輯: tony123930 (101.11.41.118), 08/22/2018 18:29:08

08/22 18:50, 7年前 , 40F
左轉code板
08/22 18:50, 40F
閒聊咩,那些板我很常逛了啦 但倒是沒看過有什麼板真的叫code的 ^^ ※ 編輯: tony123930 (101.11.41.118), 08/22/2018 18:55:27

08/22 18:55, 7年前 , 41F
看不懂。先推
08/22 18:55, 41F

08/22 19:01, 7年前 , 42F
其實就是太多了難改 但這個功能應該比小字的晚吧 小字都用
08/22 19:01, 42F

08/22 19:01, 7年前 , 43F
大數存了 max damage沒辦法很怪
08/22 19:01, 43F

08/22 19:20, 7年前 , 44F
整數用int真的很直覺 更何況還比long好打多了 打long還
08/22 19:20, 44F

08/22 19:20, 7年前 , 45F
要動到無名指 超不方便 ㄎ
08/22 19:20, 45F

08/22 19:28, 7年前 , 46F
new int[1000];
08/22 19:28, 46F

08/22 19:38, 7年前 , 47F
還特別幫那個科學記號同學釋疑,推個
08/22 19:38, 47F
其實我沒這麼好心,看到的第一眼其實滿反感的 我很不喜歡在那邊裝懂,尤其是還帶著優越感的 一副「這麼簡單你們都想不到」的口吻 實際上更顯露出自己的草率,所以想鞭一下而已

08/22 19:46, 7年前 , 48F
進位簡單啦 MCU的資料都是兩個8接一起 只是這樣寫有浪
08/22 19:46, 48F

08/22 19:46, 7年前 , 49F
費空間的嫌疑
08/22 19:46, 49F

08/22 19:49, 7年前 , 50F
資料沒大到需要封裝 這樣接不是很好
08/22 19:49, 50F
特地定義一個class的好處就是,不怕overflow了 總是超出long long都可以保持一樣的精準度 但就是會需要額外動態要記憶體的功

08/22 19:50, 7年前 , 51F
嗯嗯跟我想得一樣
08/22 19:50, 51F

08/22 20:19, 7年前 , 52F
對於會寫出風暴這種智障技能的工程師,我是不會指望他們
08/22 20:19, 52F

08/22 20:19, 7年前 , 53F
能把事情做得多好啦
08/22 20:19, 53F
麥安內,技能不一定是工程師想的 頂多只能說他們實作的效能很差,以後還得寫上android建議規格

08/22 20:19, 7年前 , 54F
這是歷史共業
08/22 20:19, 54F

08/22 21:13, 7年前 , 55F
其實有個很實際的考量,就是畫面長度
08/22 21:13, 55F

08/22 21:13, 7年前 , 56F
在畫UI的時候,上面能夠提供寫數字的範圍是有限的,
08/22 21:13, 56F

08/22 21:14, 7年前 , 57F
位數增加時勢必會讓字體變小或是其他狀況,導致UI效果差
08/22 21:14, 57F

08/22 21:14, 7年前 , 58F
你看他在寫超過21e的時候並不是overflow,表示工程師有考慮
08/22 21:14, 58F
其實每次超出億的時候我都看不清楚數字,要打上去才知道 有人可以支援超過21億的圖嗎?

08/22 21:15, 7年前 , 59F
超過時的狀況,評估結果後捨棄精準的數字 反正這數字只是爽
08/22 21:15, 59F

08/22 21:16, 7年前 , 60F
這樣的UI設計理念事實上很清楚也很簡單
08/22 21:16, 60F

08/22 21:59, 7年前 , 61F
我想樓上是對的 畢竟沒有overflow
08/22 21:59, 61F
※ 編輯: tony123930 (101.11.41.118), 08/22/2018 23:40:10

08/23 00:06, 7年前 , 62F
當然 當你的Data因原先的Container總是會有不正常行為
08/23 00:06, 62F

08/23 00:09, 7年前 , 63F
本來就需要繼承或定義新的物件來封裝
08/23 00:09, 63F

08/23 00:09, 7年前 , 64F
不過我覺得這玩意不太會造成UserConfuse/異常終止
08/23 00:09, 64F

08/23 00:10, 7年前 , 65F
也不用這麼認真啦 XD
08/23 00:10, 65F

08/23 00:11, 7年前 , 66F
但認真覺得他們工程師蠻混的就是
08/23 00:11, 66F

08/23 01:46, 7年前 , 67F
這篇好認真 推一個
08/23 01:46, 67F

08/23 09:12, 7年前 , 68F
快推 不然別人以為我們看不懂
08/23 09:12, 68F

08/24 01:58, 7年前 , 69F
支援超過21億的圖
08/24 01:58, 69F
啊啊,我其實是說小字或打在怪上的 > <

08/24 21:17, 7年前 , 70F
08/24 21:17, 70F
※ 編輯: tony123930 (101.11.41.118), 08/24/2018 23:45:45

08/26 00:34, 7年前 , 71F
哈哈 小字的 我暫無存w
08/26 00:34, 71F
文章代碼(AID): #1RVFyGB_ (ToS)
文章代碼(AID): #1RVFyGB_ (ToS)