开启左侧

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

[复制链接]
-DKZ4- 作者认证 2022-12-19 12:43:09
本帖最后由 -DKZ4- 于 2022-12-19 12:46 编辑
2 W8 q& M& V7 r9 y! S1 R
3 L$ k- D) Z+ {3 Z: c# e这个bug类似于旧版本边境之地的方块抖动,具体表现在:# D4 O& s$ C& y$ X/ a! v+ I* q
2 C  }3 _; {5 Z
当坐标大于100000格时,MTR列车、轨道会在移动视角时产生轻微抖动。" N1 q: ?6 C. J' r1 V
当坐标更大时,轨道甚至会出现扭曲的情况。! d* q& \; V- {
作为对照,原版的生物不会受到任何影响。/ \1 @' b! g3 u/ e. W% w
版本1.18.2 Fabric,在服务器和单人存档均测试过,都会有bug. \9 F# k, E. P" w

; ^! i3 R5 o* A1 Q* q/ g* c; T. z4 m

本帖子中包含更多资源

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

×
头像被屏蔽
XHG78999 作者认证 2022-12-19 12:54:33
肯定是溢出了,估计是算曲线算出上限了
- M$ x$ G9 d( T9 G2 i- J/ w' i建议边算边取模(下意识
签名被屏蔽
Zbx1425 作者认证 2022-12-19 12:58:08
MTR 内部大部分计算现使用 32 位浮点数,所以会有精度误差。
3 l' h* E6 K+ c" N  U7 z换成 64 位浮点数能让这些现象出现的位置更远些,但这就要进行很多的改动。考虑到不常有人有需求建造如此大规模的系统,或许不太值得做。

评分

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

查看全部评分

Zbx1425 作者认证 2022-12-19 13:01:53
XHG78999 发表于 2022-12-19 12:547 Q% X6 {$ {" a% [
肯定是溢出了,估计是算曲线算出上限了- d8 J. p1 u$ S
建议边算边取模(下意识
  G4 p. P* ]' h) c- C
这个不是溢出,是浮点数有效数字有限使得它不能准确表示大数字。4 U1 Q. H, g0 p0 {$ m! D$ E) M
举例来说,如在十进制中,只能使用四位有效数字的情况下,可以正常表示 1.4 和 1.5;但 1234.4 和 1234.5 就无法区分,只能退而求其次都成为 1234。
) F  c9 B; a/ r! x# F4 u! E6 v$ a2 X这就使计算出的结果与应有的精确值产生误差,让它偏离位置。+ }1 @) `3 Q" e
大宝剑呀 2022-12-19 13:34:34
竟然还有这种bug
*ููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููู็็็็็็็็็็็็新喷射字符                                  *←已绝版的喷射字符
我贺知章一样       B站大宝剑呀404
HXD3 作者认证 2022-12-19 13:40:00
本帖最后由 mtrrtrain 于 2022-12-19 13:59 编辑 / e) P+ ?8 o5 Z  M+ i& q. I, a
Zbx1425 发表于 2022-12-19 12:58
* @( w3 ^9 S8 S" YMTR 内部大部分计算现使用 32 位浮点数,所以会有精度误差。$ o! R' \) I* }+ l
换成 64 位浮点数能让这些现象出现的位置更远 ...

  l6 h" a5 h* Z* e0 J既然MTR换成64位浮点数这个bug就会得到修复,4 f$ R7 d" B6 g& i5 E
minecraft老版本的边境之地bug之所以被修复是不是因为把32位浮点数,换成了64位的?+ Q6 K1 P0 n: Y, X- L# c
头像被屏蔽
XHG78999 作者认证 2022-12-19 14:30:33
Zbx1425 发表于 2022-12-19 13:015 S2 R+ P2 b" a7 Q
这个不是溢出,是浮点数有效数字有限使得它不能准确表示大数字。7 V' W0 P* r% b& y' N* S% ~1 L
举例来说,如在十进制中,只能使用四位有 ...
5 _. S, Z3 g5 _/ ^1 }
(为什么我回忆的概念都是小数精度损失是溢出的一种呢
9 Z# J5 M( @- f2 ?可否像Farlands一样直接热替换呢
签名被屏蔽
头像被屏蔽
XHG78999 作者认证 2022-12-19 14:31:26
mtrrtrain 发表于 2022-12-19 13:40
7 s8 S/ R# d" L( Y% M既然MTR换成64位浮点数这个bug就会得到修复,
& X3 _: K. D! q; F3 z8 l8 S) Ominecraft老版本的边境之地bug之所以被修复是不是因为把32位 ...
, Z# I" G( K" D8 Q
正确  V8 U; B( j' C+ S1 T
但是如果你用热替换把64位强制改成BigInteger然后突破边墙就可以复现边境之地
签名被屏蔽
yuxihe 2022-12-19 15:15:02
1919(警撅
, L( W3 G- Y' g3 @- a1 c
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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