开启左侧

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

[复制链接]
-DKZ4- 作者认证 2022-12-19 12:43:09
本帖最后由 -DKZ4- 于 2022-12-19 12:46 编辑 9 Y: d9 m2 j' ^2 Q

( o% [* o; x/ d) l* M6 z8 T这个bug类似于旧版本边境之地的方块抖动,具体表现在:
) p  `0 s% ~. G2 i8 f/ ~& l7 C* E. R( k1 `
当坐标大于100000格时,MTR列车、轨道会在移动视角时产生轻微抖动。9 T1 B" F; J" v# W6 U( N$ E
当坐标更大时,轨道甚至会出现扭曲的情况。7 y* {5 q. h" @$ s9 k1 f! v: @
作为对照,原版的生物不会受到任何影响。
: C! T& t; q$ \1 F- E. E9 A) _7 s版本1.18.2 Fabric,在服务器和单人存档均测试过,都会有bug5 Y) T7 o. c% a) v, o
) e1 f$ |/ I* o- u

7 r: Y% ]5 Q/ E

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
头像被屏蔽
XHG78999 作者认证 2022-12-19 12:54:33
肯定是溢出了,估计是算曲线算出上限了
8 P  }- H: {6 x+ u# E0 e建议边算边取模(下意识
签名被屏蔽
Zbx1425 作者认证 2022-12-19 12:58:08
MTR 内部大部分计算现使用 32 位浮点数,所以会有精度误差。9 h6 f8 x4 T0 [7 _" {2 Y! I
换成 64 位浮点数能让这些现象出现的位置更远些,但这就要进行很多的改动。考虑到不常有人有需求建造如此大规模的系统,或许不太值得做。

评分

参与人数 1 +1 收起 理由
MSnj_studioX + 1 有人做大规模,飞机出了必然有.

查看全部评分

Zbx1425 作者认证 2022-12-19 13:01:53
XHG78999 发表于 2022-12-19 12:54, A0 ^' A& S, t+ B( i% J2 p
肯定是溢出了,估计是算曲线算出上限了- J# B, d9 a5 C2 l4 K8 H
建议边算边取模(下意识
- u+ a$ j! u0 z
这个不是溢出,是浮点数有效数字有限使得它不能准确表示大数字。
" I% n  K; E. Y# b举例来说,如在十进制中,只能使用四位有效数字的情况下,可以正常表示 1.4 和 1.5;但 1234.4 和 1234.5 就无法区分,只能退而求其次都成为 1234。9 b! m7 M" N, c2 _' I' o
这就使计算出的结果与应有的精确值产生误差,让它偏离位置。2 Y4 a4 e* ~* |  `( P  C; ^* E
大宝剑呀 2022-12-19 13:34:34
竟然还有这种bug
*ููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููู็็็็็็็็็็็็新喷射字符                                  *←已绝版的喷射字符
我贺知章一样       B站大宝剑呀404
HXD3 作者认证 2022-12-19 13:40:00
本帖最后由 mtrrtrain 于 2022-12-19 13:59 编辑
# N) Y8 T( j$ t/ b9 @- C: x
Zbx1425 发表于 2022-12-19 12:58) }$ Q% q4 E3 G3 n2 a1 f2 w
MTR 内部大部分计算现使用 32 位浮点数,所以会有精度误差。/ a, ]: F- \( @2 `$ p; A
换成 64 位浮点数能让这些现象出现的位置更远 ...

6 I7 S7 J, D8 g5 f/ o" N) x既然MTR换成64位浮点数这个bug就会得到修复,# {6 {) a4 @. b2 [4 ]; l" D3 E* I, h
minecraft老版本的边境之地bug之所以被修复是不是因为把32位浮点数,换成了64位的?5 j" f1 O& E+ q. ]( b" H
头像被屏蔽
XHG78999 作者认证 2022-12-19 14:30:33
Zbx1425 发表于 2022-12-19 13:01% T: h1 J6 H7 j' I
这个不是溢出,是浮点数有效数字有限使得它不能准确表示大数字。
6 g+ d* y2 Z3 q3 J举例来说,如在十进制中,只能使用四位有 ...

' b7 a. ]" L% o(为什么我回忆的概念都是小数精度损失是溢出的一种呢% t$ b  T- W+ o$ E4 ?" J& d0 {8 e
可否像Farlands一样直接热替换呢
签名被屏蔽
头像被屏蔽
XHG78999 作者认证 2022-12-19 14:31:26
mtrrtrain 发表于 2022-12-19 13:40' P+ D# D1 e: @# [$ T+ N5 D
既然MTR换成64位浮点数这个bug就会得到修复,
0 H, F7 i* z' |' k" H4 sminecraft老版本的边境之地bug之所以被修复是不是因为把32位 ...

1 k2 U5 W; |/ H0 f: U正确
4 C# ^( J. @  s; l/ g. l! Y但是如果你用热替换把64位强制改成BigInteger然后突破边墙就可以复现边境之地
签名被屏蔽
yuxihe 2022-12-19 15:15:02
1919(警撅) H' J8 D$ G1 b0 E, s7 A
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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