如何知道 float 变量何时停止增加 0.001?

How to know when a float variable is going to stop increasing by 0.001?

我想知道如果我将它增加 0.001,如何确定浮点(或双精度)变量将停止增加它的值。

如果我们谈论浮点值的二进制表示:1 位用于符号,8 位指数位,23 位用于尾数。我们知道当我们达到一个确定的高值(32768)然后我们添加一个非常小的值(0.001)时,由于指数的EXC 127表示,加法结果将是:

32768 + 0 = 32768

据此,即使我们添加 0.001,变量也将具有相同的值。

下一个代码永远不会中断。

float max =100000;
float delta=0.001F;
float time = 0;
while (time < max)
{
time += delta;
if(time == max)
    break;
}

谁能帮我确定一个变量何时停止增加? (独立地,如果它是一个浮点数或一个双精度数,想法是有一个浮动逗号变量)。

您的 time 变量默认大于 max 变量。

真的很简单: 如果时间从 215100 开始,时间永远不会等于最大值,而最大值是 100000,只要您向时间添加一些正数。此外,由于浮点数不精确,比较浮点数有点问题。

回答你的方程式问题: 如果

添加将完全失败
[(log a)/(log 2)]<[((log b)/(log 2))^-c]

在哪里

  • a是你要添加的小浮点数
  • b 是您要添加的大型公寓
  • c为尾数长度(浮点数为23)

time 变得足够大以至于其 ULP (unit in the last place) 的大小大于您的 delta.