conversion double en int ? [C++] - C++ - Programmation
Marsh Posté le 15-04-2004 à 17:41:20
quel est le problème ? ensuite tu fous tout ça dans un int et voilà ... enfin size_t plutot. fait attention aux débordements.
ton usage de rand est mauvais
Citation : Dans Numerical Recipes in C: The Art of Scientific Computing (William |
Marsh Posté le 15-04-2004 à 17:50:02
bah oui mais si je mets ça dans un int tout bêtement il me sort un warning... ça fait pas très propre
(conversion from 'double' to 'int', possible loss of data)
Marsh Posté le 15-04-2004 à 17:56:12
bah ouais ... faut caster un peu bourrin. commence par faire une fonction qui te renvoie un entier aléatoire déjà. ensuite utilise là. ou alors utiliser stl/boost/sgi y a tout ce que tu veux pour sélectionner au hasard un élément dans une séquence
Marsh Posté le 15-04-2004 à 17:59:57
oué ok je vais voir tout ça
d'ailleurs ça m'a l'air pas mal ça : http://home1.gte.net/deleyd/random/crandom.html
merci pour ton aide
Marsh Posté le 15-04-2004 à 18:09:53
j'ai pas dis le contraire, c'était dans ma recherche en parallèle
voilà ça me donne ça :
Code :
|
Marsh Posté le 15-04-2004 à 18:12:03
voilà. maintenant encapsule tout ça dans une fonction pour que ça fasse plus propre
Marsh Posté le 15-04-2004 à 18:21:35
Oui c'est déjà dans une fonction sauf que j'ai pas tout copié...
Marsh Posté le 15-04-2004 à 18:28:24
ofbdood a écrit : j'ai pas dis le contraire, c'était dans ma recherche en parallèle
|
Je me permettrais juste 2 remarques :
- il vaut mieux utiliser une valeur variable ppour ton srand() plutot qu'une valeure fixe. Par exemple un compteur système ou tout simplementl'heure
- tu n'es pas obligé d'utiliser autant de variable, tu peux même tout écrire, le cast y compris en une ligne, mais ça c'est plus une question de gout
bonne continuation
Marsh Posté le 15-04-2004 à 18:44:02
Mais là tu auras une troncature, pas un arrondi, il faut ajouter ou retrancher 0.5 suivant le signe, dans ton cas rajouter suffit :
Code :
|
Marsh Posté le 15-04-2004 à 18:53:37
Désolé mais ça ne fait pas vraiment un arrondi dans le principe ça ...
Je préfère ma méthode
Marsh Posté le 15-04-2004 à 19:01:05
Vous battez pas , dans mon cas ça n'a que peu d'importance (du moment que j'adapte correctement derrière)
pour le srand effectivement je vais mettre l'heure parce que là, la première fois il me resort tjs la même combinaison (ce qui est logique en fait)
Pour ce qui est de l'écriture pour l'instant je fais mon petit truc et quand tout marchera bien j'optimiserais un peu
Marsh Posté le 15-04-2004 à 22:29:08
Cricri_ a écrit : Désolé mais ça ne fait pas vraiment un arrondi dans le principe ça ... |
ben alors tu utilises round
Marsh Posté le 16-04-2004 à 00:16:25
Question peut être un peu stupide, mais pourquoi ne faut'il pas utiliser les bit de poids faibles ?
Marsh Posté le 16-04-2004 à 01:19:49
Ben c'est écrit dans le lien donné plus haut http://home1.gte.net/deleyd/random/crandom.html
C'est parce que, dans une implémentation souvent utilisée de générateur de nombres pseudo-aléatoires, les bits de poids faibles ont tendance à être "moins aléatoires" que ceux de poids fort.
Marsh Posté le 16-04-2004 à 09:18:10
ReplyMarsh Posté le 16-04-2004 à 09:23:11
Citation : Note: on Microsoft Visual C++ 6.0, if seed is negative than a seed value from the system clock is used. Also check for a randomize() function on your compiler. |
Ca veut dire que un random avec seed=-1 choppe lheure système en lieu et place de -1 sous VC++ ?
Marsh Posté le 16-04-2004 à 13:33:19
ReplyMarsh Posté le 18-04-2004 à 16:21:18
Petites simplifications...
double fdRoundTemp;
srand(10000); //Ou le le timer
fdRoundTemp = ((double)rand()/(double)(RAND_MAX+1));
fdRoundTemp *= (double)lNbColors;
tab_code[i] = tab_colors[(long)fdRoundTemp];
PS:le int à un problème, sur certains compilateurs, il est en 16, 24, 32, 48 voire 64 bits... Avec un long (ou un short), pas de problème
Marsh Posté le 18-04-2004 à 16:26:33
christophe_d13 a écrit : |
même problème avec les long
le type a utilisé est size_t .|
Marsh Posté le 18-04-2004 à 16:30:42
oui, short est fixé a 16 bits mais long est le type natif, 32 bits sur les machines 32 bits, 64 pour les machines 64 bits ...
Marsh Posté le 18-04-2004 à 16:42:29
rien ne dit ça ... il y a juste des exigences de minima et de relation d'ordre dans les sizeof, rien de plus.
Marsh Posté le 18-04-2004 à 16:52:09
PS: long est au minimum en 32 bits... alors que int varie.
malheureusement l'ansi n'a pas fixée et normalisée le type 32 et 64 bits... Résultat avec GCC pour le 64 bits on fait du "long long" et "__int64" avec VC.
Mais on s'éloigne du sujet.
Marsh Posté le 18-04-2004 à 17:30:35
mais le long long est standard
non, on ne s'éloigne pas. tu nous fais toi même la démonstration du flou qu'il existe, t'essaie de te rattraper aux branches. moi je dis "utilise size_t", ce type entier non-signé est fait pour ça
Marsh Posté le 15-04-2004 à 17:38:48
slt à tous,
voilà j'ai un petit problème, je vous montre
donc en fait je génère un nombre aléatoire (entre 0 et 1), je le multiplie par le nombre de couleurs et je l'arrondis. Ensuite avec ce nombre arrondi (donc qui est un pseudo entier) je selectionne un index du tableau.
Le problème ce que pour un index il faut un "vrai" int et non pas un double du genre 5.00.
Voilà mon petit problème si quelqu'un à la solution
merci d'avance !