| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 21350 人关注过本帖
标题:编译时没错,运行时出现浮点数异常(Floating point exception)错误怎么回事 ...
只看楼主 加入收藏
Frefreak
Rank: 2
等 级:论坛游民
帖 子:25
专家分:28
注 册:2011-7-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
编译时没错,运行时出现浮点数异常(Floating point exception)错误怎么回事?
虚拟机的ubuntu11.10
搜索更多相关主题的帖子: 虚拟机 
2011-11-10 21:13
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:5 
同一个程序在一台高版本Linux上运行时没有问题,而在另一台低版本机器上运行报Floating Point Exception时,那么这极有可能是由高版本gcc链接造成的。高版本的gcc在链接时采用了新的哈希技术来提高动态链接的速度,这在低版本中是不支持的。因此会发生这个错误。gcc就是一个编译器。编译出来的软件在低版本操作系统上有些技术不支持造成这个原因。
http://zhidao.baidu.com/question/302750348.html?an=0&si=2
2011-11-10 21:26
Frefreak
Rank: 2
等 级:论坛游民
帖 子:25
专家分:28
注 册:2011-7-4
收藏
得分:0 
显示现在的版本是4.6.1,还要升?
2011-11-10 22:21
Frefreak
Rank: 2
等 级:论坛游民
帖 子:25
专家分:28
注 册:2011-7-4
收藏
得分:0 
运行时没有错误了,但是其中的一个求最大公约数的函数好像没返回正确的值,请帮忙看看:
程序代码:
int max_common_divisor(int p, int q)
{
      int c;
      do {
         c = p%q;
         p = q;
         q = c;
         } while((c<-1)||(c>1));
      if(c=0) return p;
      else return 1;
}


[ 本帖最后由 Frefreak 于 2011-11-11 01:37 编辑 ]
2011-11-11 01:29
Frefreak
Rank: 2
等 级:论坛游民
帖 子:25
专家分:28
注 册:2011-7-4
收藏
得分:0 
所有的程序(实现两个分数形式的有理数相加),type_rational函数打印还有些问题,但是先把求最大公约数的函数的返回值解决吧:
程序代码:
#include<stdio.h>
struct rational_numbers {int p,q;};
void type_rational(struct rational_numbers r);
int max_common_divisor(int p, int q);
struct rational_numbers add_rational(struct rational_numbers r1, struct rational_numbers r2);

void type_rational(struct rational_numbers r)
{
      int p,q;
      p = r.p/max_common_divisor(r.p,r.q);
      q = r.q/max_common_divisor(r.p,r.q);
      if (p * q <0)
         {
         if (p>0) printf("-%d/%d",p,-q);
         else printf("-%d/%d",p,q);
         }
      else if(p > 0) printf("%d/%d",p,q);
      else printf("%d/%d",-p,-q);
}

int max_common_divisor(int p, int q)
{
      int c;
      do {
          c = p%q;
          p = q;
          q = c;
         } while((c<-1)||(c>1));
      if(c=0) return p;
      else return 1;
}

struct rational_numbers add_rational(struct rational_numbers r1, struct rational_numbers r2)
{
      struct rational_numbers r;
      r.p = r1.p * r2.q + r1.q * r2.p;
      r.q = r1.q * r2.q;
      return r;
}
      
int main(void)
{
      struct rational_numbers r1,r2,r;
      scanf("%d/%d",&r1.p,&r1.q);
      scanf("%d/%d",&r2.p,&r2.q);
      r = add_rational(r1,r2);
      type_rational(r);
      return 0;
}


[ 本帖最后由 Frefreak 于 2011-11-11 07:46 编辑 ]
2011-11-11 07:43
Frefreak
Rank: 2
等 级:论坛游民
帖 子:25
专家分:28
注 册:2011-7-4
收藏
得分:0 
好吧,我发现我的问题了……
2011-11-11 10:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:15 
int max_common_divisor(int p, int q)
{
      int c;
      do {
          c = p%q;
          p = q;
          q = c;
         } while((c<-1)||(c>1));
      if(c=0) return p;
      else return 1;
}

这是刻意设计的条件吗?

授人以渔,不授人以鱼。
2011-11-11 11:02
Frefreak
Rank: 2
等 级:论坛游民
帖 子:25
专家分:28
注 册:2011-7-4
收藏
得分:0 
以下是引用TonyDeng在2011-11-11 11:02:26的发言:

int max_common_divisor(int p, int q)
{
      int c;
      do {
          c = p%q;
          p = q;
          q = c;
         } while((c<-1)||(c>1));
      if(c=0) return p;
      else return 1;
}

这是刻意设计的条件吗?

为什么这样问呢?我事实上就是这里错了,犯了低级错误
2011-11-11 11:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
编译器之所以无法在这样的方面给出错误或警告信息,就是因为事实上有专门这样写的程序——真的有。这不是编译器的问题,只能看程序员意图的。

授人以渔,不授人以鱼。
2011-11-11 11:27
Frefreak
Rank: 2
等 级:论坛游民
帖 子:25
专家分:28
注 册:2011-7-4
收藏
得分:0 
以下是引用TonyDeng在2011-11-11 11:27:35的发言:

编译器之所以无法在这样的方面给出错误或警告信息,就是因为事实上有专门这样写的程序——真的有。这不是编译器的问题,只能看程序员意图的。

嗯,谢谢,以后我会尽量注意不犯这样的错误的
2011-11-11 11:30
快速回复:编译时没错,运行时出现浮点数异常(Floating point exception)错误怎 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034570 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved