Что означает EPS в C?

У меня есть следующий фрагмент кода:

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

который я пытаюсь преобразовать в C#. Что означает "EPS"?

этот код от http://local.wasp.uwa.edu.au / ~pbourke / геометрия / lineline3d/

7 ответов


Это будет какая-то форма Эпсилон чтобы определить, является ли число "достаточно маленьким, чтобы быть незначительным". Точное значение выглядит так, как будто это #defined где-то в этом случае.


EPS-это Эпсилон. Фактор "достаточно близко".

вопрос в том, " является ли абсолютное значение достаточно близким?"Где "достаточно близко" - это небольшое число, часто что-то вроде 1.0E-3.

В зависимости от того, как алгоритм сходится на ответ, производительность может зависеть от размера EPS. Будьте осторожны, делая EPS слишком маленьким, потому что ваш процесс может работать часами (или столетиями) и не давать действительно полезный ответ.

в этом случае -- где нет никакого цикла - EPS используется, потому что числа с плавающей запятой накапливают небольшие ошибки во время умножения. Вы не можете просто сказать

a == b

и пусть это будет правдой в целом. Поэтому мы всегда говорим

abs( a-b ) <= EPS

Я бы сказал, что Джон Скит прав. Посмотрев на код lisp на этой странице, вы найдете аналогичную ссылку в вычислениях под названием "nearzero", которая определяется как таковая:

(setq nearzero 0.00001)

поэтому из этого я бы сказал, что EPS является константой, установленной на 0.00001.


Эпсилон... Вероятно, это будет #define...

Epsilon обычно используется для обозначения числа, очень близкого к нулю в пределах float или двойной точности.

Он используется для определения, если значение p43.x достаточно близко к нулю, чтобы считаться нулем.


скажу, что ЭПС для Эпсилона:

в математике (особенно исчислении), произвольно (или почти так) малая положительная величина.

в вашем примере он используется для определения, является ли результат (ABS (p43.x) достаточно мал (близок к нулю).


скорее всего, p43 - Это структура, которая содержит значения с плавающей запятой. Поскольку значения с плавающей запятой имеют конечную точность, они могут представлять только подмножество действительных чисел, что означает, что часто необходимо проверять равенство с запасом ошибок округления.

вместо проверки x = 0 проверяет код |x| < EPS, то есть все значения в ]-EPS, +EPS[ считаются достаточно маленькими, чтобы быть 0.

если бы вы прочли на машина Эпсилон!--11-->.


в C и C++ у вас есть константы препроцессора FLT_EPSILON и DBL_EPSILON,которые являются наименьшими числами, такими, что 1 + {FLT, DBL}_EPSILON > 1 для float и двойной точности соответственно. Эта ЭПС, кажется, некоторые подобные специальные "близкой к нулевой" стоимости.