首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >被零除不会抛出SIGFPE

被零除不会抛出SIGFPE
EN

Stack Overflow用户
提问于 2011-09-01 16:33:28
回答 3查看 8K关注 0票数 17

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

代码语言:javascript
复制
#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;
}

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

代码语言:javascript
复制
d = inf

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

在这种情况下,我应该如何抛出SIGFPE?FP操作行为依赖于哪些因素(编译器标志/CPU类型等)?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-01 16:58:37

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

票数 6
EN

Stack Overflow用户

发布于 2011-09-01 16:49:43

只有在执行整数除零时才会得到信号。对于浮点数,被零除是很好的定义。

这实际上在Wikipedia article中得到了很好的解释。

票数 11
EN

Stack Overflow用户

发布于 2011-09-01 17:15:34

您不会收到信号,因为大多数机器上的默认行为是使用NaNs (非数字)和无穷大来污染您的数据。您必须启用浮点异常,并且如何启用是特定于计算机的。如果您有系统接口fenv.h,请查看它。函数fesettrapenable支持在许多机器上捕获浮点异常。

不幸的是,没有标准函数来开启浮点异常处理。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7267838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档