找回密码
 点一下
查看: 1346|回复: 3

Galaxy脚本的实数和小数精度。

[复制链接]
发表于 2012-12-17 20:37:11 | 显示全部楼层 |阅读模式
SC2中所有需要同步的数据(即逻辑数据,非本地数据和Actor数据)都采用的都是20.12格式的定点小数。这一点在Galaxy脚本里也一样,Galaxy脚本的语法虽然像C,但是里头的实数类型名其实是fixed,意即定点小数,没有单精度和双精度之分。

也就是说,SC2的定点小数最小精度为1/4096(因为2^12 = 4096),换算成实数是0.00024。也就是说,基本上小数点后面的置信位数只有三位。

也就是说,想要以最大精度表示一个实数的话(假设整数部分位数足够),那么就先把这个数乘以4096,然后再在Galaxy里把所得结果除以4096。这样它的精度就能达到0.00024——比三位小数稍微精确了那么一点点……


由于第一位是符号位,所以SC2的定点小数的整数部分只有19位。因此能够表示的实数最大值为524288-1/4096,而最小值为-524288
发表于 2012-12-17 20:37:59 | 显示全部楼层
本帖最后由 四夕水草肃 于 2012-12-17 20:47 编辑

抢占沙发。

在此精度下可以求得一些常用的常实数的最精确值(就是与精确值的误差不超过1/8192=0.0001220703125的数值)。在触发器中建立实数类常变量,然后把值设定为两个实数的除法即可求得。推荐给诸位有强迫症的同学使用。
以下是一些常数的除法式,欢迎补充。
圆周常数π:12869/4096 误差:2.530e-4
数学常数e:11134/4096 误差:2.011e-5

点评

掠夺者!  发表于 2012-12-17 20:39

评分

参与人数 1互助 +3 收起 理由
麦德三世 + 3 很好~~

查看全部评分

回复

使用道具 举报

发表于 2012-12-17 20:45:10 | 显示全部楼层
涨姿势了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-24 22:30 , Processed in 0.255607 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表