Что означает 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/geometry/lineline3d/

7 ответов

Решение

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

EPS это эпсилон. "Достаточно близкий" фактор.

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

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

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

a == b

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

abs( a-b ) <= EPS

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

(setq nearzero 0.00001)

Исходя из этого, я бы сказал, что EPS является постоянной величиной 0,00001.

Я скажу, что EPS для Epsilon:

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

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

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

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

Вы можете также рассмотреть вопрос о прочтении на компьютере эпсилон.

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

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

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

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

Другие вопросы по тегам