开启左侧

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

[复制链接]
-DKZ4- 作者认证 2022-12-19 12:43:09
本帖最后由 -DKZ4- 于 2022-12-19 12:46 编辑 , d. B2 x2 p8 m1 o
( }! H2 W: y% [" A- b; ~
这个bug类似于旧版本边境之地的方块抖动,具体表现在:
# A$ `, F5 Z3 R6 w. D6 z0 ?3 E# M& m0 v8 f! ]
当坐标大于100000格时,MTR列车、轨道会在移动视角时产生轻微抖动。
9 x% s& D* ^, ]当坐标更大时,轨道甚至会出现扭曲的情况。& x* ]2 f6 |2 b1 R+ P+ H
作为对照,原版的生物不会受到任何影响。2 B0 E* t9 K/ h7 \* ^$ V
版本1.18.2 Fabric,在服务器和单人存档均测试过,都会有bug6 l$ y. k, b, s  j

% K5 }6 R' f" X6 }" I1 t& P' F( n! h! O# B3 l, p, n+ s

本帖子中包含更多资源

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

×
头像被屏蔽
XHG78999 作者认证 2022-12-19 12:54:33
肯定是溢出了,估计是算曲线算出上限了3 K7 \4 N3 c8 T7 S
建议边算边取模(下意识
签名被屏蔽
Zbx1425 作者认证 2022-12-19 12:58:08
MTR 内部大部分计算现使用 32 位浮点数,所以会有精度误差。% ]( c7 |5 S; _- j$ A8 v3 \' ?. Z; \
换成 64 位浮点数能让这些现象出现的位置更远些,但这就要进行很多的改动。考虑到不常有人有需求建造如此大规模的系统,或许不太值得做。

评分

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

查看全部评分

Zbx1425 作者认证 2022-12-19 13:01:53
XHG78999 发表于 2022-12-19 12:54* A7 B* b2 O6 o* H5 Q. U, }: D& }  h
肯定是溢出了,估计是算曲线算出上限了
# P6 X( l) P& _' A# Z+ Y$ [建议边算边取模(下意识
& H8 }( D' u+ V$ B; A: |! y
这个不是溢出,是浮点数有效数字有限使得它不能准确表示大数字。( \6 g2 P9 ?- ?9 X2 T
举例来说,如在十进制中,只能使用四位有效数字的情况下,可以正常表示 1.4 和 1.5;但 1234.4 和 1234.5 就无法区分,只能退而求其次都成为 1234。) o3 n; v6 ^2 E; n( [
这就使计算出的结果与应有的精确值产生误差,让它偏离位置。
/ l* _5 Q7 x0 J
大宝剑呀 2022-12-19 13:34:34
竟然还有这种bug
*ููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููููู็็็็็็็็็็็็新喷射字符                                  *←已绝版的喷射字符
我贺知章一样       B站大宝剑呀404
HXD3 作者认证 2022-12-19 13:40:00
本帖最后由 mtrrtrain 于 2022-12-19 13:59 编辑
, w; Z3 E1 j  J7 H: t9 l
Zbx1425 发表于 2022-12-19 12:58' S9 k" `! I+ F' b6 C
MTR 内部大部分计算现使用 32 位浮点数,所以会有精度误差。# }, B$ G$ x' W- s0 E9 [( ?
换成 64 位浮点数能让这些现象出现的位置更远 ...
9 a& |: l. }* t1 ^2 R0 L
既然MTR换成64位浮点数这个bug就会得到修复,
& U0 e- l2 p6 g, c+ ^minecraft老版本的边境之地bug之所以被修复是不是因为把32位浮点数,换成了64位的?( |2 G+ u" c; p0 p/ _& ~5 ?, l2 ?
头像被屏蔽
XHG78999 作者认证 2022-12-19 14:30:33
Zbx1425 发表于 2022-12-19 13:01
1 C" u* \$ S% G  {! G  o这个不是溢出,是浮点数有效数字有限使得它不能准确表示大数字。# m+ p2 I/ Q; R/ o5 k( k+ O
举例来说,如在十进制中,只能使用四位有 ...
; f2 {% z) p( p; K1 [' E. y
(为什么我回忆的概念都是小数精度损失是溢出的一种呢- W! o$ g4 y% J2 i: Z
可否像Farlands一样直接热替换呢
签名被屏蔽
头像被屏蔽
XHG78999 作者认证 2022-12-19 14:31:26
mtrrtrain 发表于 2022-12-19 13:40
; P% m# e; x" b' p既然MTR换成64位浮点数这个bug就会得到修复,; }! [  a2 |. ?. o
minecraft老版本的边境之地bug之所以被修复是不是因为把32位 ...
  Q1 ^  B' N# x! A- q: B
正确' K4 u' y; M$ H0 y8 b; U
但是如果你用热替换把64位强制改成BigInteger然后突破边墙就可以复现边境之地
签名被屏蔽
yuxihe 2022-12-19 15:15:02
1919(警撅, ~' l+ Y$ u: E
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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