首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++中的SIGFPE误导

c++中的SIGFPE误导
EN

Stack Overflow用户
提问于 2014-02-04 15:31:48
回答 2查看 181关注 0票数 0

我正在尝试理解下面这个程序的奇怪行为。显然,在定义全局变量"bug“的过程中发生了溢出,但程序在无害的计算1.0+2.0期间抛出了一个浮点异常。

代码语言:javascript
复制
#include <iostream>
#include <cmath>
#include <fenv.h>

using namespace std;

const double bug = pow(10.0,pow(10.0,10.0));

int main(void)
{
  feenableexcept(-1);

  cout << "before" << endl;
  cout << 1.0 + 2.0 << endl;
  cout << "after" << endl;

  return 0;
}

我尝试用g++和clang++编译它,但都得到了相同的输出

代码语言:javascript
复制
before
Floating point exception
EN

回答 2

Stack Overflow用户

发布于 2014-02-04 15:33:20

应该使用const double bug = pow(10.0,pow(10.0,10.0));。因为pow需要(double,double)参数而你正在传递(int,int)

票数 1
EN

Stack Overflow用户

发布于 2014-02-04 17:16:58

有一次我遇到类似的情况,浮点错误出现在奇怪的地方。据我所知,这是因为FPU状态寄存器是同步的,而不是在每个浮点指令期间,所以错误可能看起来是随机的。顺便说一下,我刚刚编译并启动了你的程序,它完成了,没有任何问题。我的解决方案是在错误计算后清除FPU状态寄存器(当然这是hack,但当时我无法分析那个数学库)。

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

https://stackoverflow.com/questions/21546484

复制
相关文章

相似问题

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