【发布时间】:2016-06-11 19:17:52
【问题描述】:
我想知道如果我将浮点(或双精度)变量增加 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;
}
有人可以帮我确定一个变量以了解变量何时停止增加吗? (独立地,如果它是浮点数或双精度数,想法是有一个浮点逗号变量)。
【问题讨论】:
-
我在这里只需要注意,将浮点变量精确地增加 0.001 或将 0.001 精确地表示为浮点数是不可能的。 docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
标签: c# binary double break representation