2017-05-31 99 views
-5

没有要求的解决方案或任何事情,只是一个一般性的问题。当getgcd()函数被调用时,我得到一个浮点异常。为什么是这样?我已经研究过这个,并且找不到直接的答案。谢谢,下面还有我正在使用的代码。为什么我得到一个“浮点异常”

#include <iostream> 
using namespace std; 

class D: public E { 
private: 
     int var2; 

public: 

     D(int var, int var2) : E(var) { 
       var2 = var2; 
     } 

     void getgcd() { 
       int temp; 
       int newVar = E::var; 
       while (var != 0) { 
         temp = newVar % var2; 
         newVar = var2; 
         var2 = temp; 
       } 
       cout << "The GCD of " << newVar << " and " << var2 << " is " << var2 << endl; 
     } 
}; 

#include <iostream> 
#include "A4p2.cpp" 
#include "A4p3.cpp" 
using namespace std; 

int main(int argc, char *argv[]) { 
     int x, y; 
     x = atoi(argv[1]); 
     y = atoi(argv[2]); 

     if (x < 1 || x > 50) { 
       cout << "Input must be between 1-50" << endl; 
       exit(0); 
     } 

     E test(x); 
     D test1(x, y); 
     test.play(); 
     test1.getgcd(); 
     return 0; 
} 
+4

'#包括 “A4p2.cpp” 的#include “A4p3.cpp”'只要别做! –

+0

你可以包括你的完整代码,包括你的'类E'的定义是什么? – callyalater

+0

是的,这是一个任务,但任务还没有结束浮点异常,我只是碰到它跑的决定要求。稍微宽松一点 – kprog

回答

2

Linux的不幸整数除法 /模数通过零上SIGFPE映射,然后将其天真地打印输出为“浮点异常”。我不认为我见过它(零个总是在x86故障可能是因为大多数FP例外必须明确开启,同时整数除法)浮点运算的到来。

最大的可能是你在

temp = newVar % var2; 

var2等于零这反过来又可能是由一个事实,即,在循环中,你正在检查var但使用/修改var2引起的。

while (var != 0) { 
     temp = newVar % var2; 
     newVar = var2; 
     var2 = temp; 
} 

您可能想要while (var2 != 0)

相关问题