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

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

8 голосов
/ 09 марта 2009

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

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 ]

20 голосов
/ 09 марта 2009

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

9 голосов
/ 09 марта 2009

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

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

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

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

a == b

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

abs( a-b ) <= EPS
2 голосов
/ 09 марта 2009

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

(setq nearzero 0.00001)

Итак, я бы сказал, что EPS является константой, равной 0,00001.

1 голос
/ 09 марта 2009

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

1 голос
/ 09 марта 2009

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

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

Вы также можете рассмотреть возможность чтения на аппарате epsilon .

1 голос
/ 09 марта 2009

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

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

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

1 голос
/ 09 марта 2009

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

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

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

...