IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Choisir un environnement de développement Discussion :

Différence VS et g++


Sujet :

Choisir un environnement de développement

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut Différence VS et g++
    Bonjour,

    Travaillant actuellement sur un projet de calcul scientifique, je bosse à la fois sous windows et sous linux. Quand je compile avec VS sous Windows, j'obtiens bien les résultats escomptés. Cependant quand je passe sous Linux et que j'utilise g++, mes résultats sont faux (je trouve le double de ce que je devrais trouver) mon intervalle de confiance garde la même taille avec les deux compilateurs.

    Avant de poster mon code ou quoi que ce soit, j'aimerais savoir si il n'y aurait pas quelques erreurs classiques qui peuvent amener à de tels écarts de résultat qui seraient regrouper dans un document.

    Merci d'avance de votre aide ?

    PS: la première idée qui me vient à l'esprit est qu'une variable ne soit pas initialisée et que VS la mette à 0 et pas g++... c'est plausible ?

  2. #2
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par allced Voir le message
    PS: la première idée qui me vient à l'esprit est qu'une variable ne soit pas initialisée et que VS la mette à 0 et pas g++... c'est plausible ?
    Tout à fait.
    Cependant, Microsoft à la fâcheuse manie de nous mâcher un peu trop le travail. Ce n'est normalement pas au compilateur d'initialiser les variables, mais bien au développeur.
    Disons que si "ça marche" (ça compile? les résultats escomptés sont là?) avec VS et pas avec g++, ça me semble plausible de dire que c'est à cause de ce genre de détails.
    Le C++ est sensé être interprété de la même façon dans les deux cas. Mais, désolé pour toi, je ferais plus confiance à g++ qu'à VS....
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Compare aussi les résultats "Debug" et "Release" de Visual.
    Les différences entre les deux cas peuvent apprendre bien des choses.

    @Spout: En Release, Visual n'initialise pas les variables.
    Et en Debug, il les initialise à des variables calculées pour détecter plus facilement les erreurs (crash au déréférencement d'un pointeur "non-initialisé").

    Un autre truc auquel on ne pense pas souvent, c'est augmenter le niveau de Warnings de Visual.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    J'ai compilé en mode release, j'obtiens encore de bons résultats.
    J'ai également envoyé mon code a un copain qui a compilé avec CodeBlocks (sous Windows) et ça marche très bien chez lui aussi...

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Joue avec les options d'optimisation de g++.
    Active autant de warnings que possible dans g++ (-Wall -Wextra -Wwrite-strings minimum).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par allced Voir le message
    J'ai compilé en mode release, j'obtiens encore de bons résultats.
    J'ai également envoyé mon code a un copain qui a compilé avec CodeBlocks (sous Windows) et ça marche très bien chez lui aussi...
    Que se passe-t-il alors quand tu passes par g++? Ca compile au moins? Es-tu sûr de ne pas utiliser quelque chose spécifique Windows?
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Oui oui ça compile, ça fait des calculs mais ça renvoie pas les bonnes valeurs.

    Je ne fais que des boucles, des opérations élémentaires et j'utilise un générateur aléatoire indépendant de la machine.

  8. #8
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    (et c'est à ce moment là que tu nous montre ton code pour qu'on puisse vérifier et chercher de notre côté )
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Salut,

    Voici ma fonction principale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    double BarrierOption::Simule() const
    {
    	//on regarde si l'actif est sortie du domaine aux instants
    	//de discrétisation
    	double X=S.getS0();
    	double t=0;
    	double h=S.getDT();
    	bool out=false;
    	for(int i=0;i<S.getN();i++)
    	{
    		S.setSCurr(X);
    		X+=S.get_Increment(t,h);
    		t+=h;
    		if ((X<=bg) || (X>=bd)) {out=true;}
    	}
    	if(!out)
    		return P(X);
    	else
    		return 0;
    }
    P(X) renvoie simplement max(X-K,0). K étant un membre de la classe P qui est initialisé.

    Je vous donne également la méthode get_Increment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    double Processus_Ito::get_Increment(double t, double h) const{
        //on utilise un schéma d'Euler
        double inc= b(t,*SCurr)*h+sigma(t,*SCurr)*sqrt(h)*W.Simule();
        return inc;
    }
    W.Simule () ... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    double Normale::Simule() const {
        double u=U.simule();
        double v=U.simule();
    	double z=sqrt(-2*log(u))*cos(2*PI*v);
       return mean+sqrt(variance)*z;
    }
    U est une loi uniforme obtenu à partir d'un générateur congruentiel qui m'a été fourni.

    Merci.

  10. #10
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par allced Voir le message
    Je ne fais que des boucles, des opérations élémentaires et j'utilise un générateur aléatoire indépendant de la machine.
    L'explication de différences de résultats est là ! Si le générateur aléatoire diffère entre g++ et VC++ c'est normal que tu obtiennes des différences !
    Tout dépend de la manière dont est implémenté la génération aléatoire selon le compilateur.
    Est-ce que tu utilises rand() quelque part ? rand() de g++ n'est sans doute pas le même de VS.

Discussions similaires

  1. Différence entre un "bidouilleur" et un Pro ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 290
    Dernier message: 28/11/2011, 10h53
  2. Différence entre TCP, UDP, ICMP
    Par GliGli dans le forum Développement
    Réponses: 1
    Dernier message: 13/09/2002, 08h25
  3. [CR][Jetform] Quelles sont les différences ?
    Par littlecow dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 23/07/2002, 11h40
  4. Différences entre jmp, jz, jnz, etc
    Par christbilale dans le forum Assembleur
    Réponses: 3
    Dernier message: 05/07/2002, 15h09
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo