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