无法捕获atan2域错误

时间:2010-07-02 02:11:02

标签: c++ exception-handling

我正在使用第三方库,例如。 Lib::ValueType value。然后我调用成员函数value.theta(),该函数执行一些数学运算,包括从atan2调用<cmath>。有时theta组件为空,并抛出“atan2:domain error”。但是,即使将try{}catch(...)包裹在可疑代码周围,我也无法捕获异常。

我正在使用C ++ Builder 2009,想知道如何抛出异常并且没有被IDE或我的代码捕获。错误会直接弹出到屏幕上作为对话框。我已选择IDE中的所有选项来处理每种类型的异常。

3 个答案:

答案 0 :(得分:1)

C标准库不了解C ++异常处理,因此try-catch不起作用。您可能希望查看matherr函数 - 根据文档,您可以在程序中重新定义此函数,以便自己处理数学异常。

答案 1 :(得分:0)

不幸的是,C数学库不了解C ++异常。您很可能从硬件中看到未处理的浮点异常。 atan2对其输入非常宽容:唯一无效的情况是(0,0)所以你所要做的就是在进行函数调用之前验证一个参数是非零的,以防止异常。

编辑:然后你需要在调用函数时阻止无效的theta组件。第三方图书馆文档在调用theta时有效说什么?

答案 2 :(得分:0)

atan2函数不应该为参数(0,0)抛出异常。请参阅Charles Petzold的讨论:http://www.charlespetzold.com/blog/2008/09/180741.html。所以看起来C ++ Builder的标准库是错误的。