用C语言处理数学错误

用C语言处理数学错误,c,error-handling,numeric,C,Error Handling,Numeric,我想用C实现一个数值算法,我在错误处理方面遇到了一些问题。我使用cmath.h中的ldexp函数的方式与前面描述的类似。注意这一点(下一个例子来自C++站点。这是因为我找不到任何最新的C特定站点)。 但是,ldexp函数可能会因大指数(示例中的n值)而溢出,在这种情况下,将返回inf 我想确保(至少在调试模式下)检测到此错误。 我发现了一个关于C错误处理的例子,它提出了更多的问题 首先,似乎有两种不同的错误处理方法:MATH\u err除外和MATH\u ERRNO。在我的系统上,这两个选项似乎

我想用C实现一个数值算法,我在错误处理方面遇到了一些问题。我使用
cmath.h
中的
ldexp
函数的方式与前面描述的类似。注意这一点(下一个例子来自C++站点。这是因为我找不到任何最新的C特定站点)。

但是,
ldexp
函数可能会因大指数(示例中的
n
值)而溢出,在这种情况下,将返回
inf

我想确保(至少在调试模式下)检测到此错误。 我发现了一个关于C错误处理的例子,它提出了更多的问题

首先,似乎有两种不同的错误处理方法:
MATH\u err除外
MATH\u ERRNO
。在我的系统上,这两个选项似乎都得到了支持(根据bitflag)

为什么有两种不同的方法?其中一个(或两者)是否标准化(在C11中)?我可以假设使用哪种方法,还是总是需要为这两种方法编写代码


对于每种方法:在执行操作之前是否需要清除错误状态?如果我执行一系列
ldexp
操作,我只关心是否在任何操作中发生了错误(检查一次错误是否足够)?

可能值得您阅读“7.12.1错误条件的处理”一节,实际上是“7.12数学”一节的全部内容。“我找不到任何最新的C特定站点”…尝试或我建议禁用数学函数设置
errno
,因为这会妨碍编译器生成有效的代码。在gcc中,使用
-fno-math errno
。您需要的不仅仅是
双y=ldexp(x,n);如果(!isfinite(y)Handle_Error())
?可能值得您阅读“7.12.1错误条件的处理”一节,事实上,整个“7.12数学”一节中都有“我找不到任何最新的C特定站点”“…尝试或我建议禁用数学函数设置
errno
,因为这会妨碍编译器生成有效的代码。在gcc中,使用
-fno-math errno
。是否需要超过
双y=ldexp(x,n);if(!isfinite(y)Handle_Error();