繁体   English   中英

除以零不会引发SIGFPE

[英]Division by zero does not throw SIGFPE

我有一个小程序执行浮点除以零,所以我希望使用SIGFPE。

#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

void signal_handler (int signo) {
    if(signo == SIGFPE) {
      std::cout << "Caught FPE\n";
    }
}

int main (void) {
  signal(SIGFPE,(*signal_handler));

  double b = 1.0;
  double c = 0.0;
  double d = b/c;
  std::cout << "d = "<< d << std::endl;
  return 0;
}

实际上,我得到以下输出:

d = inf

gcc版本4.5.2(Ubuntu / Linaro 4.5.2-8ubuntu4)

在这种情况下,我应该怎么做才能抛出SIGFPE? FP操作行为取决于哪些因素(编译器标志/ CPU类型等)?

谢谢

如果执行整数除以零,则只会得到信号。 对于浮点数,可以很好地定义除以零。

实际上,在Wikipedia文章中对此进行了很好的解释。

对于浮点数,您可以通过设置FPU控制字来更改此行为。 在这里看看

您不会收到任何信号,因为大多数计算机上的默认行为是使用NaN(非数字)和无限数污染您的数据。 您必须启用浮点异常,并且这是特定于计算机的。 查看系统头文件fenv.h (如果有)。 fesettrapenable函数可在许多计算机上捕获浮点异常。

不幸的是,没有标准功能可以打开浮点异常处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM