【发布时间】:2011-11-08 05:33:02
【问题描述】:
我有一个小程序执行浮点除以零,所以我期待 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 类型等)?
谢谢
【问题讨论】:
-
如果你有 IEEE 浮点数,这应该是相当标准的。
标签: c++ gcc floating-point sigfpe