Не удается поймать ошибку домена atan2 - PullRequest
1 голос
/ 02 июля 2010

Я использую стороннюю библиотеку, например.Lib::ValueType value.Затем я выполняю вызов функции-члена value.theta(), которая выполняет некоторые математические операции, включая вызов atan2 из <cmath>.Иногда компонент theta пуст и выдается «atan2: domain error».Тем не менее, я не могу поймать исключение, даже обернув try{}catch(...) вокруг подозрительного кода.

Я использую C ++ Builder 2009, любая идея о том, как исключение генерируется и не перехватывается IDEили мой код.Ошибка выскакивает прямо на экран в виде диалога.Я выбрал все параметры в среде IDE для обработки всех типов исключений.

Ответы [ 3 ]

1 голос
/ 02 июля 2010

Стандартная библиотека C не знает об обработке исключений C ++, поэтому try-catch не будет работать. Возможно, вы захотите взглянуть на функцию matherr - в соответствии с документацией вы можете переопределить эту функцию в своей программе, чтобы самостоятельно обрабатывать математические исключения.

0 голосов
/ 28 января 2014

Функция atan2 не должна выдавать исключение для аргументов (0,0). См. Обсуждение Чарльза Петцольда здесь: http://www.charlespetzold.com/blog/2008/09/180741.html. Так что похоже, что стандартная библиотека C ++ Builder глючит.

0 голосов
/ 02 июля 2010

К сожалению, математическая библиотека C не знает об исключениях C ++. Скорее всего, вы видите необработанное исключение с плавающей точкой из вашего оборудования. atan2 чрезвычайно простителен для своих входных данных: единственный недопустимый регистр - это (0, 0), поэтому все, что вам нужно сделать, это проверить, что один аргумент не равен нулю, прежде чем делать вызов функции для предотвращения исключения.

РЕДАКТИРОВАТЬ: Затем вам нужно предотвратить недопустимый тета-компонент при вызове функции. О чем говорит документация сторонней библиотеки, когда можно звонить theta?

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