最小的EPSILON比较C中的双变量?

时间:2017-08-25 18:16:32

标签: c floating-point double epsilon

在我的程序中,我将特定坐标放入列表中。但是,算法有时会将相同的坐标放入列表中两次。为了避免这种情况,我通过将EPSILON值与列表中所有位置的x和y值的绝对差值进行比较来进行标准方法:

<input type="number" step="0.01" id="change">

我有几个问题:

1)这个实现比较两个粒子的位置是否正确?

2)我可以选择EPSILON多小? (粒子可以非常接近)

3)是否有更快/更强大的实现来比较粒子的位置?

1 个答案:

答案 0 :(得分:2)

  

但是,算法有时会将相同的坐标放入列表中两次。为了避免......

     

是的,我的意思是相同的坐标(相同的粒子=相同的位置)。不只是两个彼此非常接近的双变量。

要避免使用相同的XY元素,只需进行简单的比较即可

bool doubleEqual(double x1, double y1, double x2, double y2){
    return (x1 == x2) && (y1 == y2);
}
  

1)这个实现比较两个粒子的位置是否正确?

使用固定差值(epsilon)仅对窄范围的FP值有意义。 1e100和2e100与浮点视点下的1e-100和2e-100类似。

  

2)我可以选择EPSILON多小? (粒子可以非常接近)

要比较同一性,请使用==

  

3)是否有更快/更强大的实现来比较粒子的位置?

只需使用==

即可

代码可以将双精度数与==进行比较,这对于比较相等性而非近似性非常有用。如果只需要平等预防,那么if (x1 == x2 && y1 == y2)就足够了。

更深层次的问题是为什么“相同的坐标列入两次”一个问题? IMO,这个限制就是问题所在。使用不需要该限制的算法。