2017-05-31 3 views
-5

Ne pas demander de solution ou quoi que ce soit, juste une question générale. Lorsque la fonction getgcd() est appelée, j'obtiens une exception à virgule flottante. Pourquoi est-ce? J'ai fait des recherches et je ne trouve pas de réponse claire. Merci, aussi ci-dessous est le code que je travaille avec.Pourquoi est-ce que j'obtiens une "exception à virgule flottante"

#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

'#include" A4p2.cpp " #include" A4p3.cpp "' Ne fais pas ça! –

+0

Pouvez-vous inclure votre code complet, y compris votre définition de «classe E»? – callyalater

+0

Oui, il s'agit d'une affectation, mais l'affectation n'est pas au-delà des exceptions à virgule flottante, je viens de courir à travers elle a décidé de demander. Soyez un peu plus lénifiant – kprog

Répondre

2

Linux cartes malheureusement division entière/modulo par zéro sur SIGFPE, qui est ensuite imprimé comme naïvement "exception de virgule flottante". Je ne pense pas que je l'ai jamais vu provenir d'opérations en virgule flottante (probablement parce que la plupart des exceptions de FP doivent être activées explicitement, alors que la division entière par zéro fait toujours défaut sur x86).

Très probablement, vous avez var2 égal à zéro dans

temp = newVar % var2; 

Cela à son tour, est probablement dû au fait que, dans cette boucle, vous vérifiez var mais en utilisant/modifier var2.

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

Vous voulez probablement while (var2 != 0).