设置某些数学errno值时,如何引发异常?

每当仅设置全局变量errno的某些值时,我就需要能够全局停止执行C ++代码(更具体地说,我只对域错误{{1 }}。

我已经看到EDOM库允许使用常数math_errhandling以便针对每种数学错误自动引发错误。

对于我来说,我有兴趣针对代码中发生的每个域错误自动提高MATH_ERREXCEPT

但是,我的代码已经可以自行处理某些数学错误类型,例如零除错误。因此,FE_INVALID的自动升高将是完全不希望的。

是否有一种实用的方法可以使用FE_DIVBYZERO或任何其他C ++库来实现这种局部异常引发?或者,如何通过检查math_errhandling的值来独自实现异常引发?

xukelongjinhong 回答:设置某些数学errno值时,如何引发异常?

我怀疑您从C ++引用了math_errhandling。那不是一个库,而是一个实现定义的常量,可以告诉您该实现如何处理错误处理。尽管可以通过某些编译器选项来更改此常数的值,但不能通过C ++更改此常数的值(请参阅文档)。

即便如此,该标准仅定义了可能的值MATH_ERRNO==1MATH_ERREXCEPT==2和(隐式)MATH_ERRNO | MATH_ERREXCEPT==3。您想知道MATH_ERREXCEPT。这仅意味着您可以在每次通话后致电std::fetestexcept(FE_INVALID)。它不是可以自动throw的真实C ++异常的自动catch

潜在的问题是C ++与真正的面向向量的FP硬件并不完全匹配。对于高性能代码,编译器将合并许多操作,但是C ++异常模型假定您可以查明确切的失败操作。 IEEE754受此影响较小,因为它具有较不精确的错误处理。使用NaN可以提高并行度。

本文链接:https://www.f2er.com/3167726.html

大家都在问