EPS在C中意味着什么?

时间:2009-03-09 16:11:59

标签: c eps

我有以下代码段:

if (ABS(p43.x)  < EPS && ABS(p43.y)  < EPS && ABS(p43.z)  < EPS) return(FALSE);

我正在尝试转换为C#。 “EPS”是什么意思?

此代码来自http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline3d/

7 个答案:

答案 0 :(得分:20)

这将是某种形式的epsilon来确定这个数字是否“足够小以至于无足轻重”。在这种情况下,确切的值看起来像是#define d。

答案 1 :(得分:9)

EPS是epsilon。 “足够接近”的因素。

问题是“绝对值是否足够接近?” “足够接近”的地方是一些小数字,通常类似于1.0E-3

根据算法如何收敛于答案,性能可能取决于EPS的大小。小心EPS太小,因为你的过程可能会运行几个小时(或几个世纪)而不能产生真正有用的答案。

在这种情况下 - 没有循环 - 使用EPS是因为浮点数在乘法过程中会累积很小的误差。你不能简单地说

a == b

总的来说它是真的。所以我们总是说

abs( a-b ) <= EPS

答案 2 :(得分:2)

我会说Jon Skeet是正确的。通过查看该页面上的lisp代码,您将在名为'nearzero'的计算中找到类似的引用,其定义如下:

(setq nearzero 0.00001)

因此,我会说EPS是一个常数设置为0.00001。

答案 3 :(得分:1)

Epsilon ......它可能是#define ......

Epsilon通常用于表示浮点数或双精度范围内非常接近零的数字。

它用于确定p43.x的值是否足够接近零以计为零。

答案 4 :(得分:1)

我会说EPS适用于Epsilon:

  

在数学(特别是微积分)中,任意(或接近)小的正数。

在你的例子中,它用于确定(ABS(p43.x)的结果是否足够小(接近于零)。

答案 5 :(得分:1)

最有可能的是,p43是一个保存浮点值的结构。由于浮点值具有有限的精度,它们只能表示实数的一个子集,这意味着通常需要检查具有舍入误差余量的相等性。

代码检查x = 0,而不是检查|x| < EPS,即]-EPS, +EPS[中的所有值都被视为小到0

您也可以考虑阅读machine epsilon

答案 6 :(得分:1)

在C和C ++中,您有预处理器常量FLT_EPSILON和DBL_EPSILON,它们是最小的数字,使得1 + {FLT,DBL} _EPSILON&gt; 1表示浮动和双精度。这个EPS似乎是一些类似的应用程序特定的“接近零”值。