C: деление двойного на двойные выходы lnf - PullRequest
0 голосов
/ 22 декабря 2009

http://pastie.org/752941

Когда я делю dy / dx, возвращается lnf. Пожалуйста, скажите мне, что это означает и как я могу найти фактический результат dy / dx. Спасибо.

Ответы [ 2 ]

5 голосов
/ 22 декабря 2009

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

Например, если у вас уже есть наибольшее число, которое может быть представлено удвоениями IEEE754, и вы делите его на 0,1 (то есть умножаете на 10), вы получите + Inf.

IEEE754 выделяет некоторые битовые комбинации специальным значениям, таким как +/- бесконечность и NaN (не число).

Я давно перестал пытаться представлять линии как (градиент, y-пересечение) пары на компьютерах (это нормально на бумаге, так как вы можете вычислять с бесконечностью в своей голове). Вы можете избежать всех неприятностей бесконечности, просто представив линии в виде (x1, y1, x2, y2) 4-кортежей - вы найдете алгоритмы, которые работают довольно хорошо для всех градиентов, если вы представите свои отрезки линий таким образом.

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

1 голос
/ 22 декабря 2009

Inf = Бесконечность. Вы получаете это, потому что dx равен 0, и, следовательно, вы делите на 0. Это может быть допустимым - например, вертикальная линия.

Убедитесь, что dx имеет желаемое значение, прежде чем вычислять наклон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...