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

作者: tony123930 (HW)   2018-08-22 14:13:34
手機回文
印象中好像在板上看過不少次相關討論了
覺得好像可以來簡易科普一下
不知道發了會不會有點掃興,不過還是簡介一下
關於算術這件事情,其實就理論而言都很理想跟直觀
但真的牽扯到實作的時候,就會衍生很多細節
先來簡單舉個例子:
假設現在要做算術運算,而你只有一張紙
上面只有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的範疇,而是否打死也只是一個比較邏輯而已
作者: a0193143 (萬咒逆)   2018-08-22 14:19:00
如果傷害沒有膨脹這麼多應該比較不會有這種問題
作者: drajan (EasoN)   2018-08-22 14:22:00
好像在看我同事的code review 長篇大論一長串(讚美)
作者: acer5738G (綠膿桿菌)   2018-08-22 14:34:00
推一個 不然別人以為我看不懂
作者: Satansblessi (chaotic warrior)   2018-08-22 14:42:00
長知識了
作者: elvisleeee (李先生)   2018-08-22 14:53:00
我是覺得不錯啦樓下怎麼看
作者: katseng5566 (Yourass)   2018-08-22 15:01:00
所以為什麼要用int而不用跟實際傷害顯示一樣的code
作者: peter0627 (biscuit)   2018-08-22 15:01:00
我幫樓下問有沒有文組版本
作者: sanji7700 (大熊)   2018-08-22 15:07:00
推一個假裝自己看得懂
作者: hok   2018-08-22 15:22:00
嗯嗯,跟我想的差不多
作者: kids1243 (RW)   2018-08-22 15:22:00
他是說小字已經可以顯示超過21e,max damage卻還是用int
作者: pippen2002 ((EJ1547))   2018-08-22 15:24:00
長姿勢了!!
作者: andy19960407 (258698)   2018-08-22 15:30:00
文組問個,為啥堅持要用int 不用long long之類的
作者: wizoza77658 (十三)   2018-08-22 15:41:00
跟資源規劃有點關係,傷害值的資料型態在非常早期就必須決定,那時無法預測傷害的範圍,為了不知多遠的將來(誰知道這遊戲活這麼久?)先把傷害值的資料型態調整成 long 甚至更大範圍,只是浪費手機的資源而已,因為即使數字很小,花費的空間都是相同的。極端一點來說,甚至有可能因為這樣的資源浪費,造成某些較低階的手機無法進行遊戲。以一個大型project來說,底層的code基本都沒什麼人想動,因為很容易搞出大問題,比較經典的例子,應該是WoW(魔獸世界)的16格包包問題,有興趣的話可以查查看。
作者: krizarlid (Let's Go Cubs !)   2018-08-22 15:45:00
自己寫個物件然後overload實作operator = =?會造成這樣的原因很簡單 code不是一個人maintain的有些東西就是牽扯太多不好改
作者: birdjack (啾啾啾)   2018-08-22 15:50:00
因為不同資料型態之間運算容易出錯,能避免是最好
作者: SamFuld (山佛)   2018-08-22 15:58:00
沒錯,你把我想講的全部講完了
作者: rehearttw (易懷)   2018-08-22 16:16:00
推專業
作者: aki1023 (秋月)   2018-08-22 16:22:00
快推免得别人以為我們看不懂
作者: wak (默艾)   2018-08-22 16:56:00
應該很快就會有21億血量的怪,然後21億的防禦,再無視破防..
作者: glassesguy (glassesguy)   2018-08-22 17:06:00
假借科普 偷鞭科學記號
作者: arsia (陳阿生)   2018-08-22 17:12:00
英文系畢業表示完全看不懂
作者: pdemonq (魯味不夠魯)   2018-08-22 17:19:00
無視破防? 傷害盾不就是了嗎?
作者: wak (默艾)   2018-08-22 17:48:00
不太一樣。防禦力是牆(低於防禦傷害為0),傷害盾是比例弱化
作者: bell1708 (橫山推)   2018-08-22 17:57:00
資工系大一C語言就教了
作者: omyg0d2007 (歐買尬)   2018-08-22 18:16:00
推 不明覺厲
作者: phoenix286 (糰子大家族)   2018-08-22 18:26:00
好奇這種手遊都是用C實作的嗎?我學的code很多都不用自己宣告變數型態
作者: y36987412 (阿渣)   2018-08-22 18:50:00
左轉code板
作者: kimp01pr1nce (不知道該取甚麼)   2018-08-22 18:55:00
看不懂。先推
作者: beef68 (牛肉)   2018-08-22 19:01:00
其實就是太多了難改 但這個功能應該比小字的晚吧 小字都用大數存了 max damage沒辦法很怪
作者: NIKE74731 (耐吉七四七三一)   2018-08-22 19:20:00
整數用int真的很直覺 更何況還比long好打多了 打long還要動到無名指 超不方便 ㄎ
作者: surimodo (好吃棉花糖)   2018-08-22 19:28:00
new int[1000];
作者: nodnarb1027 (nodnarb1027)   2018-08-22 19:38:00
還特別幫那個科學記號同學釋疑,推個
作者: krizarlid (Let's Go Cubs !)   2018-08-22 19:46:00
進位簡單啦 MCU的資料都是兩個8接一起 只是這樣寫有浪費空間的嫌疑資料沒大到需要封裝 這樣接不是很好
作者: Bensonoc (Bensonoc)   2018-08-22 19:50:00
嗯嗯跟我想得一樣
作者: g06cj6 (闇月夜)   2018-08-22 20:19:00
對於會寫出風暴這種智障技能的工程師,我是不會指望他們能把事情做得多好啦
作者: dsa3717 (FishCA)   2018-08-22 20:19:00
這是歷史共業
作者: chigi (  )   2018-08-22 21:13:00
其實有個很實際的考量,就是畫面長度在畫UI的時候,上面能夠提供寫數字的範圍是有限的,位數增加時勢必會讓字體變小或是其他狀況,導致UI效果差你看他在寫超過21e的時候並不是overflow,表示工程師有考慮超過時的狀況,評估結果後捨棄精準的數字 反正這數字只是爽這樣的UI設計理念事實上很清楚也很簡單
作者: drajan (EasoN)   2018-08-22 21:59:00
我想樓上是對的 畢竟沒有overflow
作者: krizarlid (Let's Go Cubs !)   2018-08-23 00:06:00
當然 當你的Data因原先的Container總是會有不正常行為本來就需要繼承或定義新的物件來封裝
作者: BaseGi (Gary)   2018-08-23 01:46:00
這篇好認真 推一個
作者: adam8520 (Adam)   2018-08-23 09:12:00
快推 不然別人以為我們看不懂
作者: omyg0d2007 (歐買尬)   2018-08-24 01:58:00
https://i.imgur.com/69edHi4.jpg 支援超過21億的圖
作者: vwwvwvvvwvv (倉鼠的憤怒)   2018-08-24 21:17:00
作者: omyg0d2007 (歐買尬)   2018-08-26 00:34:00
哈哈 小字的 我暫無存w

Links booklink

Contact Us: admin [ a t ] ucptt.com