gpt4 book ai didi

java - 在 Java 中向 float 添加值速度减慢为 512

转载 作者:行者123 更新时间:2023-11-30 02:14:16 26 4
gpt4 key购买 nike

该行正在循环中执行:

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

getDelta 是自上次循环以来经过的毫秒数( double ),通常平均值约为 0.001。

setPosX接受并存储浮点值。

getPosX,正如您所猜测的,返回浮点值

当绘制形状时,我看到它在屏幕上稳定移动,但是一旦 X 达到 512,它的速度就会减慢大约 10 倍。我可以 100% 地重现它,所以它是一个相当大的阻碍。

这里可能发生了什么?

最佳答案

问题是您使用的float没有足够的精度位数来表示数字。您可以通过告诉 Java 确定 if (512f + 0.005f * 0.001f == 512f) (it is true.) 来检查这一点。

在 32 位 float 中,256 到 512 之间的值的尾数的最低有效位约为 .00003,这恰好足以让您的 getDelta() 推过去(其中表明您关于值平均值为 0.001f 的假设可能是错误的)。对于 512 到 1024 之间的值,尾数的最低有效位加倍为 .00006(因为指数部分多了一个)。您的 getDelta 返回的值大约每 5 次左右向上舍入一次,因此速度减慢了十倍。

您可以使用floats here .

解决此问题的方法是将您的号码设置为double

有趣的琐事:浮点运算导致 Minecraft 在高坐标下表现得很有趣。 this page 中描述了效果。 ,尽管实际的错误可能只是整数溢出。

关于java - 在 Java 中向 float 添加值速度减慢为 512,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49090133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com