【发布时间】:2013-05-20 22:35:59
【问题描述】:
伙计们。我正在围绕浮点运算做一些工作。 0.1 不精确地用二进制浮点格式表示。于是我写下了这个
float i = 0.1f;
并期望出现不精确的异常。我打开了 -fp-trap-all=all 选项,将 fp-mode 设置为严格并在我的代码中安装了 SIGFPE 信号处理程序。但是什么也没发生。然后我尝试了
float i = 0.1f,j = 0.2f, c;
c = i + j;
仍然无法捕获任何异常!它让我发疯。
抱歉,我终于在 Linux 上使用了 intel c++ 编译器。
【问题讨论】:
-
“浮点异常”...我认为这个词并不代表你的想法。
-
@KerrekSB 但我尝试了本质上不精确的 sin 函数。但是我什么也没看到,我的程序没有捕获异常就退出了。
-
函数怎么会“本质上不精确”?
-
@KerrekSB 因为我使用了一个肯定会产生无理数的值。
-
0.1f decimal->binary 不是在编译时执行的吗?在这种情况下,您在运行时没有遇到任何异常似乎很正常......除非您使用 float i=atof('0.1'); 进行初始化
标签: c floating-point floating-point-exceptions