chixvv
本帖最后由 chixvv 于 2021-7-22 10:21 编辑
mlybj 发表于 2021-7-21 17:37
然而我试过好像并不是四舍五入(((

图1里的112.98989898989898在游戏里(图2)变成了112(9C706C→(15 ...

因为颜料的颜色是用0.0F~1.0F的值表示的
帽子的颜色是用0~255的整数表示的
再加上mojang的迷惑代码,以及数字在数据类型之间有意无意的转化
最后结果肯定会有偏差

以下是具体一点的代码:

mlybj
本帖最后由 mlybj 于 2021-7-22 01:15 编辑
chixvv 发表于 2021-7-21 20:41
因为颜料的颜色是用0.0F~1.0F的值表示的
帽子的颜色是用0~255的整数表示的
再加上mojang的迷惑代码,以及 ...


其它地方都懂了,也写出来了(并且基本无误了),但是有个地方出了小问题,图2中是B33780,而图3(游戏中)是B43780,根据小数部分也相差不大(179.99999999差不多180),我猜测是因为我染料的RGB没有取小数,然后再乘以255,导致算出了偏差。但是我也不知道mj的染料RGB获取这里是保留了几位小数啊。
我刚试了一下保留5位好像不对,代码还是附上了


dye.rar (1 KB, 下载次数: 4)

chixvv
本帖最后由 chixvv 于 2021-7-22 15:51 编辑

颜料的颜色乘上255后得到的整数颜色是固定的整数,不会造成结果的偏差

所以修改了一下昨天的代码,颜料的颜色直接用整数表示,你再看一看

然后你写的python代码可能会造成一些精度损失
我对python不了解,但是运行下面的代码

a=180.0/156.0
print(float(156*a))

你能发现179.99999999999997是python造成的

chixvv
(=°ω°)丿 发表于 2021-7-22 14:58
我觉得这好像不单单是 python 的问题:
使用了在线工具:https://c.runoob.com/compile/10

180.0/156.0*156.0确实等于(double)179.99999999999997
但代码用的都是float类型
(float)179.99999999999997等于(float)180.0

百度了一下,原来python里的float是双精度。我给的代码里的float表示的都是单精度

mlybj
chixvv 发表于 2021-7-22 15:53
180.0/156.0*156.0确实等于(double)179.99999999999997
但代码用的都是float类型
(float)179.999999999999 ...

已经想到办法并解决了,非常感谢大佬w

第一页 上一页