繁体   English   中英

在Java中添加浮点值会减慢512

[英]Adding values to float in Java slows down at 512

该行正在循环执行:

shape.setPosX(shape.getPosX() + (.005f * (float) getDelta()));

getDelta是自上一个循环以来经过的毫秒数,为两倍,通常平均为0.001。

setPosX接受并存储浮点值。

如您所getPosX返回浮点值

绘制形状时,我看到它稳定地在屏幕上移动,但是一旦X达到512,它就会减速10倍。我可以100%地复制它,因此它是一个很大的障碍物。

这可能是怎么回事?

问题是您使用的float没有足够的精度数字来表示该数字。 您可以通过告诉Java确定是否( 512f + 0.005f * 0.001f == 512f )来进行检查(确实true

在32位浮点数中,尾数介于256和512之间的最低有效位约为.00003 ,这恰好足以使getDelta()推入(这表明您假设该值的平均值为0.001f可能是错误的)。 尾数的最低有效位(介于512和1024之间)的值加倍至.00006 (因为指数部分又多了)。 您的getDelta返回的结果每5次左右会四舍五入一次,因此速度降低了十倍。

你可以在这里float

解决的办法是使您的人数double

趣味问答:浮点运算是导致Minecraft在高坐标下表现出有趣的行为。 尽管实际的错误可能只是整数溢出,但在本页中描述了效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM