Comportement bizarre en c++
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Comportement bizarre en c++



  1. #1
    invite0fb72cf8

    Comportement bizarre en c++


    ------

    Bonjour à tous,

    Voilà, j'essaye de fabriquer un programme qui va étudier le comportement d'un modèle en faisant varier différents paramètres de ce modèle: epsilon et kappa. En gros, je vais faire varier epsilon de 0 à 0.5 par pas de 0.001, et kappa de 2 à 500 avec des pas aléatoires de moyenne 1 (pour différentes raisons, je ne veux pas que kappa prenne des valeurs trop régulières).

    Le programme est le suivant, j'ai enlevé tout ce qui concerne le modèle, parce que c'est la promenade dans l'espace de phase qui pose problème:

    Code:
    #include <iostream>
    #include <math.h>
    #include <time.h>
    #include <stdlib.h>
    #include <fstream>
    
    using namespace std;
    
    int main ()
    {
      int tmax=10000;
      int k, t;
      double result;
      double epsilon;
      double kappa;
    
    ofstream myfile;
      myfile.open ("data1.csv");
    
    epsilon = 0;
    while (epsilon < 0.5)
    {
    kappa = 2+rand()/(double)(RAND_MAX);
    while (kappa <= 500)
    {
    result = 0;
    cout << epsilon << "," << kappa << "," << result << endl;
    kappa = kappa +2*rand()/(double)(RAND_MAX);
    };
    epsilon = epsilon + 0.001;
    };
    };
    Pour moi, ce programme devrait me donner toutes les paires possibles de epsilon et kappa, avec un 0 après. Mais quand je lance ça sur mon pc, les kappa commencent par augmenter comme il faut, mais ensuite, ils diminuent et deviennent négatifs. Je ne comprends pas du tout, mon programme semble juste, non ?

    Toute aide est bienvenue, même pour optimiser le programme. Accessoirement, je suis novice c++.

    A+

    Ising

    -----

  2. #2
    invite765732342432
    Invité

    Re : Comportement bizarre en c++

    Citation Envoyé par Ising Voir le message
    Pour moi, ce programme devrait me donner toutes les paires possibles de epsilon et kappa, avec un 0 après. Mais quand je lance ça sur mon pc, les kappa commencent par augmenter comme il faut, mais ensuite, ils diminuent et deviennent négatifs. Je ne comprends pas du tout, mon programme semble juste, non ?
    As-tu toujours les mêmes valeurs ? peux-tu poster ici un résultat obtenu ? (ou une partie si c'est beaucoup trop grand)

  3. #3
    invite0fb72cf8

    Re : Comportement bizarre en c++

    Voici une partie des résultats que j'obtiens:

    Code:
    0,153.046,0
    0,153.848,0
    0,154.026,0
    0,153.994,0
    0,154.882,0
    0,155.579,0
    0,155.311,0
    0,155.282,0
    0,156.04,0
    0,155.07,0
    0,154.532,0
    0,153.929,0
    0,153.612,0
    0,153.546,0
    0,153.955,0
    0,154.185,0
    0,153.921,0
    0,153.556,0
    0,152.995,0
    0,152.777,0
    0,152.595,0
    0,151.714,0
    0,151.023,0
    On voit tout de suite le problème. epsilon reste bien nul, kappa est monté jusqu'à 150, mais il diminue parfois, ce qui est strictement impossible, vu que:

    kappa = kappa +2*rand()/(double)(RAND_MAX);

    et que rand() est entre 0 et RAND_MAX...

    A+

    Ising

  4. #4
    invite765732342432
    Invité

    Re : Comportement bizarre en c++

    Citation Envoyé par Ising Voir le message
    kappa = kappa +2*rand()/(double)(RAND_MAX);

    et que rand() est entre 0 et RAND_MAX...
    Bon, j'ai obtenu le même problème que toi avec ton code, mais légèrement modifié, ça marche beaucoup mieux:
    Code:
          
    double tmp;
    
    while (kappa <= 500)
            {
              result = 0;
              tmp = rand()/(double)(RAND_MAX);
              cout << epsilon << "," << kappa << "," << result << endl;
              kappa = kappa +2*tmp;
            };
    epsilon = epsilon + 0.001;
    Je présume qu'il doit y avoir un problème de conversion de type quand tu fais le 2*rand()/(double)(RAND_MAX)...

  5. A voir en vidéo sur Futura
  6. #5
    invite2d7144a7

    Re : Comportement bizarre en c++

    Bonjour,
    Citation Envoyé par Ising Voir le message
    kappa = kappa +2*rand()/(double)(RAND_MAX);

    et que rand() est entre 0 et RAND_MAX...

    A+

    Ising
    La partie que j'ai mise en rouge va être calculée dans des int, et la multiplication par 2 peut faire dépasser la limite acceptée par ce type, conduisant à une valeur négative. D'où ton problème.

    Il faudrait plutôt écrire
    Code:
    kappa = kappa +2.0*rand()/RAND_MAX;

  7. #6
    invite0fb72cf8

    Re : Comportement bizarre en c++

    Un tout grand merci pour vos remarques. Je vais modifier le programme et je vous tiendrais au courant.

    A+

    Ising

  8. #7
    invite0fb72cf8

    Re : Comportement bizarre en c++

    Ca marche parfaitement. Merci beaucoup !

Discussions similaires

  1. Google lent, comportement bizarre.
    Par invite38885527 dans le forum Sécurité et malwares : désinfectez votre machine
    Réponses: 1
    Dernier message: 21/02/2009, 22h28
  2. [Zoologie] Sos:hamster!!!comportement bizarre
    Par invited91a16fc dans le forum Biologie
    Réponses: 15
    Dernier message: 31/08/2008, 09h19
  3. [Blanc] Comportement bizarre Brandt Premia 900 PA
    Par invitef5995c90 dans le forum Dépannage
    Réponses: 2
    Dernier message: 22/08/2008, 12h40
  4. PIC + RS232 : comportement électrique bizarre
    Par invite87be5ae9 dans le forum Électronique
    Réponses: 12
    Dernier message: 26/03/2007, 00h23
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...