为什么你会在一个for循环使用双变量在所有[关闭](Why would you use double

2019-10-29 05:51发布

我读了下面的代码(在第5章,继承,霍斯特曼的核心的Java。):

double dx = (to - from) / (n-1);

for (double x = from; x <= to; x += dx)
{
  double y = (Double) f.invoke(null, x);
  System.out.printf(%10.4f |  %10.4f%n" + y, x, y);
}

为什么你会在一个for循环使用双变量呢? 而这也正是invoke用来做什么? 谢谢

编辑:f是一些相关领域

Answer 1:

这是完全没有的事,特别是如果你想通过分数值环或增量的分数值。

不过我只是想添加一些其他的答案,这是,如果你使用这种技术, 比较==为结束循环的条件。 由于精度误差,这很容易导致即使是最好的意图的无限循环。 这就是为什么你的书的代码使用<=



Answer 2:

它不使用浮点值,因为在算术和比较微妙的for循环的变量是个好主意。 你的循环可能不会通过您期望,因为舍入误差值迭代。 一个彻头彻尾情况的一个错误是可能的。


例如,这个循环

 for (double x=0.0; x < 100.0; x += 0.1)

可以预料到通过0.0,0.1,0.2,...但由于舍入误差的经过略微不同的值的值。



Answer 3:

例如,如果你想从1.5回路最多不超过8中的0.11增量,您将需要循环的双变量。



Answer 4:

我们没有理由不这样做。 通常你整数循环,但没有理由你不能做同样的事情与双打应用任意指令像X = X * 1.2或类似的东西循环迭代结束。 此外,我们需要知道什么f是告诉你什么呢调用;)



Answer 5:

这是一个非常糟糕的主意 。 对于大型n (相对于to - from ), dx将是如此之小, x += dx不会改变的值x ,让你有一个循环条件,将永远是真实的,你会被卡在环。

不要使用不准确的数据(如floatdouble )来控制程序的流程。

相反,你应该使用一个整数(例如从0包容n独家)来控制循环。 有几个方法可以做到这一点(其中大部分是错误的,当涉及到处理舍入误差),但至少可以肯定的是你的循环将终止。


关于你提到的有关问题, invoke :我觉得f是一个Method ,而不是一个Fieldjava.lang.reflect是一组类为反射 。 使用反射,程序员使它使得f点的方法,以及invoke可以用来调用该方法。 由于它被调用与null的第一个参数(这通常会规定什么this是), f 必须是指一些静态方法,才能取得成功。



文章来源: Why would you use double variables at all in a for-loop [closed]
标签: java double