首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么会出现浮点异常?

为什么会出现浮点异常?
EN

Stack Overflow用户
提问于 2010-03-16 19:24:09
回答 3查看 1.5K关注 0票数 0

我有一个浮点异常,我不知道为什么。

代码是这样的:

代码语言:javascript
复制
void calcola_fitness(){
    vector<double> fitness;
    int n=nodes.size();
    int e=edges.size();
    int dim=feasibility.size();
    int feas=(feasibility[dim-1])*100;
    int narchi=numarchicoll[dim-1]/e;
    int numero_nodi=freePathNode.size()/n;
    double dist_start_goal=node_dist(0,1);
    int i,f,t;
    double pathlenght=0;
    int siize=freePathNode.size();
    for(i=0;i!=siize-1; i++){
        f=freePathNode[i].getIndex();
        i++;
        t=freePathNode[i].getIndex();
        i--;
        pathlenght=pathlenght+node_dist(f,t);
    }        
    double pathlenghtnorm=pathlenght/10*dist_start_goal;
    double fit=((double)numero_nodi+pathlenghtnorm+(double)narchi)*((double)feas);
    fitness.push_back(fit);
}

有人能帮我吗?有什么问题吗?我能解决这个问题吗?非常感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-16 19:33:00

"Floating point exception" (SIGFPE)实际上是一个用词不当的词。任何类型的运算异常都会触发SIGFPE。这包括除以零。

您应该检查nodesedges是否为空。

票数 5
EN

Stack Overflow用户

发布于 2010-03-16 19:31:27

您可以做的最快的事情是使用调试器捕获抛出异常的确切位置。如果您使用的是g++,您可以使用gdb并使其在抛出时停止:

代码语言:javascript
复制
shell$ gdb binary
(gdb) catch throw
(gdb) run

很可能代码中的任何除数都是0,这会触发异常,但是使用调试器会告诉您确切的行,您可以检查变量值。

票数 4
EN

Stack Overflow用户

发布于 2010-03-16 19:42:34

在您的代码中,您具有以下内容:

代码语言:javascript
复制
int siize=freePathNode.size();
for(i=0;i!=siize-1; i++){
    f=freePathNode[i].getIndex();
    i++;
    t=freePathNode[i].getIndex();
    i--;
    pathlenght=pathlenght+node_dist(f,t);
}

假设freePathNode.size()返回2。在第一次迭代中,f将是元素的索引,t将是元素1的索引。在下一次迭代中,f将是元素1的索引,t将是不存在的元素2的索引。

因此,作为猜测,这就是错误出现的地方…您正在执行end()迭代器的getIndex()。

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

https://stackoverflow.com/questions/2453865

复制
相关文章

相似问题

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