Что означает 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, кажется, является некоторым подобным специфическим для приложения значением, близким к нулю.