Yur*_*sov 17 c++ floating-point gcc 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;
}
Run Code Online (Sandbox Code Playgroud)
实际上,我得到了以下输出:
d = inf
Run Code Online (Sandbox Code Playgroud)
gcc版本4.5.2(Ubuntu/Linaro 4.5.2-8ubuntu4)
在这种情况下,我应该怎么做才能抛出SIGFPE?FP操作行为依赖于哪些因素(编译器标志/ CPU类型等)?
谢谢
Mot*_*tti 10
如果执行整数除以零,则只会得到一个信号.对于浮点数,除以零是明确定义的.
这实际上在维基百科的文章中得到了很好的解释.
您没有收到信号,因为大多数计算机上的默认行为是使用NaN(非数字)和无穷大来污染您的数据.您必须启用浮点异常,以及如何执行此操作是特定于机器的.fenv.h如果您有系统标题,请查看系统标题.该函数fesettrapenable可以在许多机器上捕获浮点异常.
不幸的是,没有标准函数可以打开浮点异常处理.
| 归档时间: |
|
| 查看次数: |
6973 次 |
| 最近记录: |