J'ai une enveloppe simple pour un générateur de nombres aléatoires Mersenne. Le but est de mettre à l'échelle le nombre renvoyé par le générateur (entre 0 et 1) entre les limites définies par l'argument (début et fin).Comportement en ligne déroutant du générateur de nombres aléatoires (C++)
donc ma fonction est
inline float xlRandomFloat(float begin, float end) {return (begin+((end-begin)*genrand_real2()));}
Je ne crois pas que la mise en œuvre de la fonction genrand_real2() est important, mais si je me trompe, il peut être trouvé here
Le problème est que la fonction fait ne retourne pas le résultat traduit. La mise à l'échelle (multiplier par (début-fin) semble fonctionner correctement, mais l'addition de begin ne semble pas être retournée.)
Donc, si j'appelle xlRandomFloat (5,10) - j'obtiens des valeurs entre 0 et 5.
Si je débogage avec GDB, et utiliser la fonction d'impression puis il montre le résultat correct. donc j'essayé séparer les choses en lignes pour voir ce qui se passe
inline float xlRandomFloat(float begin, float end) {
float ret;
ret=(((end-begin)*genrand_real2()));
ret+=begin;
return ret;};
Lorsque le débogage, il a sauté directement de la première ligne dans la fonction genrand_real2() et a sauté tout le reste entièrement.C'était vraiment déroutant alors je pensais que avoir quelque chose à voir avec l'inline. J'ai déplacé le fichier de ce fichier .hpp vers le fichier .cpp et j'ai supprimé le mot-clé inline et tout fonctionne correctement.
Mais pourquoi ce comportement se produit-il, et comment puis-je intégrer cette fonction? De plus, je ne sais pas si cela est pertinent, mais souvent, lorsque j'apportais des changements aux sources, ma compilation Make disait qu'il n'y avait rien à faire. Ce qui est inhabituel puisque normalement je m'attends à faire des changements dans les sources et à reconstruire en conséquence.
Des idées.
Merci
Zenna
Merci beaucoup Vous avez raison. Je l'ai construit avec des blocs de code et cela fonctionne correctement. À l'heure actuelle, j'ai la structure suivante: tous: $ (SOURCES) $ (EXÉCUTABLE) $ (EXECUTABLES): $ (objets) $ (CC) $ (LDFLAGS) $ (objets) -o $ @ $ (CC) $ (CFLAGS) $ <-o $ @ Comme vous l'avez dit, j'essaierai d'inclure la dépendance de l'en-tête, mais je pensais que les dépendances devaient pousser NIRG à recompiler en raison de un en-tête en cours de modification, si je reconstruis tout à partir de rien cependant, comment cela pourrait-il faire la différence? – zenna