//没登陆

欢迎您来到凯恩之角,奈非天!

帖子:1204

符文:99

发表于 2018-3-3 18:31:22 |显示全部楼层
本文引用来源Wikimedia,按 CC BY-NC-SA 4.0 协议发布。




早在2017年11月的时候,琉璃曾经提出过一个五喵十球的数学问题,发现游戏中面板显示的冷却时间缩短%经常略小于理论计算的结果,可能导致死亡之地存在微小断档,无法全程覆盖。

举例来说,2条10%冷却时间缩短词缀在面板显示为18.99%,而非计算器得出的19%,甚至1条7%词缀在面板都会显示为6.99%……

在座的普罗陀思奥数学家,红黑、沙耶、铜月、阿狸等一致认为暴雪程序员使用了冥王星数学,不然则是琉璃本子妖偷走了重要的0.01%冷却。

进一步的观测发现,攻速、闪避、伤害减免、控场减免等多种人物面板属性也存在类似的现象。

对此本人立即指出,问题在于暗黑3使用浮点数进行小数运算。

简单来说,就是0.1并不是0.1,0.9也不是0.9。




我们用最通俗的语言来说明(计算机编程相关专业人士可直接跳过)。


十进制中,1/3是无限循环小数,写作 1/3=0.33333333333333333333333…

空间足够的情况下,3可以一直写下去。如果只允许保留10位有效数字,那么只能近似写作 1/3≈0.3333333333

科学记数法中记为 3.333333333 × 10^(-1)

这样,第11位及以后的精度就丢失了。使用此近似值进行运算,将无法得到精确结果。


同样,计算机使用二进位制进行计算,并且计算机数据存储单元是有限位的。

在二进制中,十进制0.1是无限循环小数,写作 0.000110011001100110011001100110011001100……

保留24位有效数字,记为 110011001100110011001101 × 2^(-4)

再将此近似表达的0.1换算回十进制,则得到 0.100000001490116119384765625

这样,第9位及以后的精度就丢失了。

类似0.1,0.2, 0.3, 0.4, 0.6, 0.7, 0.8, 0.9等都无法在二进制中表达为有限小数。


由于表达和计算过程中丢失了精度,计算结果与实数的数学运算存在偏差。

例如,0.2 + 0.8 = 2.00000002980232238769531 × 2^(-1) + 8.00000011920928955078125 × 2^(-1) = 1.00000001490116119384765 × 2^0




以计算机科学语言描述即是:


计算机中以形如 a = ± m × b^e 的方式近似表示实数,称为浮点数(floating-point number)。

类比科学记数法,± 是符号位(sign),以 + 或 - 表示正负;b是记数系统的底数(radix)或基数(base),在二进制中 b = 2;e是整数指数(exponent),表示2的幂次;

m是形如 d.ddd...ddd 的小数或分数(fraction),在正规化二进制浮点数中约定第一位d是1,小数点后每一位d都是0或1,规约化的小数又称为有效数(significant);

小数位数p称为精度(precision),决定了浮点数占用数据单元的位数。


根据精度不同,目前定义有半精度浮点数(half, binary16)、单精度浮点数(single, binary32)、双精度浮点数(double, binary64)等多种数据类型。

半精度浮点数占用2字节(16位元),其中第1位存储符号,中间5位存储指数,后10位存储尾数;

单精度浮点数占用4字节(32位元),其中第1位存储符号,中间8位存储指数,后23位存储尾数;

双精度浮点数占用8字节(64位元),其中第1位存储符号,中间11位存储指数,后52位存储尾数;

由于约定了尾数首位是1,实际有效数位比存储位数要多1;因而在二进制下,半精度浮点数有效数位是11位,单精度浮点数有效数位是24位,双精度浮点数有效数位是53位;故这三种浮点数的十进制精度分别是3,7,11位十进制有效数字。


利用浮点进行运算,称为浮点计算。浮点加法和乘法不匹配结合律和分配律。




事实上,游戏中大多数的数据都是以浮点数、整型、布尔等计算机数据格式存储的。

目前已知,使用半精度浮点数存储的属性包括:击中回复生命,击杀回复生命

使用单精度浮点数存储的属性包括:攻击速度,技能冷却缩短,闪避,伤害减免,控场减免,怪物生命值

使用双精度浮点数存储的属性包括:人物伤害


所以,计算冷却和攻速等涉及阈值的属性时,最好进入游戏打开面板进行验证




综上所述,本子秋全责。



已有 1 人评分符文 收起 理由
千年小啊黎 + 1 跟我一起喊:干死本子秋!( •&#7.

总评分:  符文 + 1   查看全部评分

La liberté est le droit de faire tout ce que les lois permettent.

帖子:2825

符文:8

2#
感谢英语老师教我的数学
发表于 2018-3-3 18:35:34 |显示全部楼层

帖子:1921

符文:198

3#
感谢体育老师教的数学
发表于 2018-3-3 18:38:05 来自凯恩之角App |显示全部楼层
头像被屏蔽

帖子:381

符文:55

4#
本子秋过来老实把锅背上
发表于 2018-3-3 18:42:53 来自凯恩之角App |显示全部楼层
头像被屏蔽

帖子:145

符文:43

5#
一脸茫然中
发表于 2018-3-3 18:42:56 来自凯恩之角App |显示全部楼层
签名被屏蔽

帖子:435

符文:143

6#
数死早,因为1加1等于几?
发表于 2018-3-3 18:46:50 来自凯恩之角App |显示全部楼层
[armory]http://cn.battle.net/d3/en/profile/快乐阳光-5664/hero/24887829[/armory]

帖子:1334

符文:2208

7#
本子秋:我没说过。(滑稽)
发表于 2018-3-3 18:48:34 |显示全部楼层
曾今沧海难为水,除却巫山不是云。
终有若水替沧海,再把相思寄巫山。

帖子:40

符文:13

8#
凯恩这么多科学家啊  厉害厉害
发表于 2018-3-3 18:55:40 来自凯恩之角App |显示全部楼层

帖子:2297

符文:98

9#
原来如此
发表于 2018-3-3 19:01:33 |显示全部楼层
[armory]http://cn.battle.net/d3/en/profile/上杉信秀-5763/hero/23408255[/armory]

帖子:1636

符文:206

10#
结论好评
发表于 2018-3-3 19:31:43 |显示全部楼层
头像被屏蔽

帖子:2424

符文:0

11#
小学学历的我表示完全不知道是说什么
发表于 2018-3-3 19:41:30 |显示全部楼层
签名被屏蔽

帖子:1217

符文:142

12#
原来这样         
发表于 2018-3-3 19:49:21 来自凯恩之角App |显示全部楼层

帖子:762

符文:64

13#
计算机基础学的不错。
发表于 2018-3-3 19:57:53 来自凯恩之角App |显示全部楼层

帖子:2289

符文:20

14#
浮点数运算是这样的,早期版本的excel运算就经常有这种问题。
发表于 2018-3-3 19:59:38 |显示全部楼层
[armory]http://hero.d.163.com/hero/cn/jackcw-5148/28579545[/armory]
头像被屏蔽

帖子:381

符文:75

15#
最喜欢这种技术贴,先回了再看
发表于 2018-3-3 20:21:33 来自凯恩之角App |显示全部楼层
签名被屏蔽
您需要登录后才可以回帖 登录 | 注册网易通行证