-DKZ4- 发表于 2022-12-19 12:43:09

MTR实体在坐标过大时产生剧烈抖动和扭曲

本帖最后由 -DKZ4- 于 2022-12-19 12:46 编辑

这个bug类似于旧版本边境之地的方块抖动,具体表现在:

当坐标大于100000格时,MTR列车、轨道会在移动视角时产生轻微抖动。
当坐标更大时,轨道甚至会出现扭曲的情况。
作为对照,原版的生物不会受到任何影响。
版本1.18.2 Fabric,在服务器和单人存档均测试过,都会有bug


XHG78999 发表于 2022-12-19 12:54:33

肯定是溢出了,估计是算曲线算出上限了
建议边算边取模(下意识

Zbx1425 发表于 2022-12-19 12:58:08

MTR 内部大部分计算现使用 32 位浮点数,所以会有精度误差。
换成 64 位浮点数能让这些现象出现的位置更远些,但这就要进行很多的改动。考虑到不常有人有需求建造如此大规模的系统,或许不太值得做。

Zbx1425 发表于 2022-12-19 13:01:53

XHG78999 发表于 2022-12-19 12:54
肯定是溢出了,估计是算曲线算出上限了
建议边算边取模(下意识
这个不是溢出,是浮点数有效数字有限使得它不能准确表示大数字。
举例来说,如在十进制中,只能使用四位有效数字的情况下,可以正常表示 1.4 和 1.5;但 1234.4 和 1234.5 就无法区分,只能退而求其次都成为 1234。
这就使计算出的结果与应有的精确值产生误差,让它偏离位置。

大宝剑呀 发表于 2022-12-19 13:34:34

竟然还有这种bug

HXD3 发表于 2022-12-19 13:40:00

本帖最后由 mtrrtrain 于 2022-12-19 13:59 编辑

Zbx1425 发表于 2022-12-19 12:58
MTR 内部大部分计算现使用 32 位浮点数,所以会有精度误差。
换成 64 位浮点数能让这些现象出现的位置更远 ...
既然MTR换成64位浮点数这个bug就会得到修复,
minecraft老版本的边境之地bug之所以被修复是不是因为把32位浮点数,换成了64位的?

XHG78999 发表于 2022-12-19 14:30:33

Zbx1425 发表于 2022-12-19 13:01
这个不是溢出,是浮点数有效数字有限使得它不能准确表示大数字。
举例来说,如在十进制中,只能使用四位有 ...

(为什么我回忆的概念都是小数精度损失是溢出的一种呢
可否像Farlands一样直接热替换呢

XHG78999 发表于 2022-12-19 14:31:26

mtrrtrain 发表于 2022-12-19 13:40
既然MTR换成64位浮点数这个bug就会得到修复,
minecraft老版本的边境之地bug之所以被修复是不是因为把32位 ...

正确:D
但是如果你用热替换把64位强制改成BigInteger然后突破边墙就可以复现边境之地

yuxihe 发表于 2022-12-19 15:15:02

1919(警撅
页: [1]
查看完整版本: MTR实体在坐标过大时产生剧烈抖动和扭曲