Les deux sont definis par la norme. En pratique, la derniere fois
Oui, mais seul cstdlib isole srand/rand avec le namespace std.
D'apres la norme...
que j'ai teste les compilateurs que j'utilise j'ai eu un comportement plus homogene et plus conforme avec mes attentes avec la forme que j'ai employee (dont je l'avoue certaines sont en contradiction avec la norme C++).
Alors il faut dire les deux... :-)
Quels compilateurs moyennement récents ne supportent pas <cstdlib> ?
Pour quelle definition de "supporter"? En pratique (je viens de reessayer avec gcc 3.3 sur Sun), certains compilateurs font pas l'isolation (c'est bien defini dans std mais aussi dans le namespace global). J'ai aussi eu le probleme (je viens de reessayer avec la derniere version de Sun CC) qu'inclure cstdlib ne definit pas ce qui est demande par POSIX tandis que stdlib.h bien et cette raison suffit a me faire preferer stdlib.h.
L'objectif d'une norme, c'est la portabilite. Quel est le probleme a utiliser stdlib.h qui est defini par la norme et plus portable que l'alternative en pratique?
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
"Michel Michaud" <mm@gdzid.com> writes:
Dans news:pxb1xswneso.fsf@news.bourguet.org, Jean-Marc
"Michel Michaud" <mm@gdzid.com> writes:
Dans news:pxbllr4njc1.fsf@news.bourguet.org, Jean-Marc
#include <stdlib.h>
#include <cstdlib>
(on est bien sur fclc++ ici ? :-)
Les deux sont definis par la norme. En pratique, la derniere fois
Oui, mais seul cstdlib isole srand/rand avec le namespace std.
D'apres la norme...
que j'ai teste les compilateurs que j'utilise j'ai eu un
comportement plus homogene et plus conforme avec mes attentes avec
la forme que j'ai employee (dont je l'avoue certaines sont en
contradiction avec la norme C++).
Alors il faut dire les deux... :-)
Quels compilateurs moyennement récents ne supportent pas <cstdlib> ?
Pour quelle definition de "supporter"? En pratique (je viens de
reessayer avec gcc 3.3 sur Sun), certains compilateurs font pas
l'isolation (c'est bien defini dans std mais aussi dans le namespace
global). J'ai aussi eu le probleme (je viens de reessayer avec la
derniere version de Sun CC) qu'inclure cstdlib ne definit pas ce qui
est demande par POSIX tandis que stdlib.h bien et cette raison suffit
a me faire preferer stdlib.h.
L'objectif d'une norme, c'est la portabilite. Quel est le probleme a
utiliser stdlib.h qui est defini par la norme et plus portable que
l'alternative en pratique?
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Les deux sont definis par la norme. En pratique, la derniere fois
Oui, mais seul cstdlib isole srand/rand avec le namespace std.
D'apres la norme...
que j'ai teste les compilateurs que j'utilise j'ai eu un comportement plus homogene et plus conforme avec mes attentes avec la forme que j'ai employee (dont je l'avoue certaines sont en contradiction avec la norme C++).
Alors il faut dire les deux... :-)
Quels compilateurs moyennement récents ne supportent pas <cstdlib> ?
Pour quelle definition de "supporter"? En pratique (je viens de reessayer avec gcc 3.3 sur Sun), certains compilateurs font pas l'isolation (c'est bien defini dans std mais aussi dans le namespace global). J'ai aussi eu le probleme (je viens de reessayer avec la derniere version de Sun CC) qu'inclure cstdlib ne definit pas ce qui est demande par POSIX tandis que stdlib.h bien et cette raison suffit a me faire preferer stdlib.h.
L'objectif d'une norme, c'est la portabilite. Quel est le probleme a utiliser stdlib.h qui est defini par la norme et plus portable que l'alternative en pratique?
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Jean-Marc Molina
Il existe pléthore de fonctions mathématiques pour générer des nombres pseudo-aléatoires, en voici une qui j'utilise : Seed = 16807 * m_Seed; Seed &= 0x7FFFFFFF; m_Seed = Seed; Seed >>= 16; Seed %= (DWORD)Max;
return (int)Seed;
Le mieux c'est de confier cette tâche aux fonctions standards comme rand et srand. Tu peux t'amuser à tester le générateur de ton compilateur en "lançant des dés" et faisant des petites stats, la petite formule que j'utilise s'en sort plutôt bien. C'était l'une des plus plébiscitées dans l'ouvrage que j'avais consulté.
JM
-- Clé AntiPourriel : PASUNPOURRIEL (ne pas retirer)
Il existe pléthore de fonctions mathématiques pour générer des nombres
pseudo-aléatoires, en voici une qui j'utilise :
Seed = 16807 * m_Seed;
Seed &= 0x7FFFFFFF;
m_Seed = Seed;
Seed >>= 16;
Seed %= (DWORD)Max;
return (int)Seed;
Le mieux c'est de confier cette tâche aux fonctions standards comme rand et
srand. Tu peux t'amuser à tester le générateur de ton compilateur en
"lançant des dés" et faisant des petites stats, la petite formule que
j'utilise s'en sort plutôt bien. C'était l'une des plus plébiscitées dans
l'ouvrage que j'avais consulté.
JM
--
Clé AntiPourriel : PASUNPOURRIEL (ne pas retirer)
Il existe pléthore de fonctions mathématiques pour générer des nombres pseudo-aléatoires, en voici une qui j'utilise : Seed = 16807 * m_Seed; Seed &= 0x7FFFFFFF; m_Seed = Seed; Seed >>= 16; Seed %= (DWORD)Max;
return (int)Seed;
Le mieux c'est de confier cette tâche aux fonctions standards comme rand et srand. Tu peux t'amuser à tester le générateur de ton compilateur en "lançant des dés" et faisant des petites stats, la petite formule que j'utilise s'en sort plutôt bien. C'était l'une des plus plébiscitées dans l'ouvrage que j'avais consulté.
JM
-- Clé AntiPourriel : PASUNPOURRIEL (ne pas retirer)
Michel Michaud
Dans news:, Jean-Marc
L'objectif d'une norme, c'est la portabilite. Quel est le probleme a utiliser stdlib.h qui est defini par la norme et plus portable que l'alternative en pratique?
Quel est l'intérêt d'avoir <cstdlib> dans cette norme ? Quel est l'intérêt d'avoir le namespace std ? (je sais, je sais, on pourra dire « quel est l'intérêt d'une norme qui n'est pas suivi par les compilateurs ? »)
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Dans news:pxbvfq7mb0d.fsf@news.bourguet.org, Jean-Marc
L'objectif d'une norme, c'est la portabilite. Quel est le probleme
a utiliser stdlib.h qui est defini par la norme et plus portable que
l'alternative en pratique?
Quel est l'intérêt d'avoir <cstdlib> dans cette norme ? Quel est
l'intérêt d'avoir le namespace std ? (je sais, je sais, on pourra
dire « quel est l'intérêt d'une norme qui n'est pas suivi par les
compilateurs ? »)
--
Michel Michaud mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
L'objectif d'une norme, c'est la portabilite. Quel est le probleme a utiliser stdlib.h qui est defini par la norme et plus portable que l'alternative en pratique?
Quel est l'intérêt d'avoir <cstdlib> dans cette norme ? Quel est l'intérêt d'avoir le namespace std ? (je sais, je sais, on pourra dire « quel est l'intérêt d'une norme qui n'est pas suivi par les compilateurs ? »)
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Erwann ABALEA
Bonjour,
On Wed, 29 Oct 2003, jjabon wrote:
et aussi, quel est son principe, (un ptit nain de jardin caché dans le cpu qui joue au dé ????)
Ca dépend de ton implémentation, mais la plupart du temps, il s'agit d'un générateur congruentiel linéaire. C'est rapide et facile à faire, et ça suffit pour des jeux, des stats, des simulations, mais pas pour de la crypto.
-- Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5 ----- J'aurai aimé savoir si en Norvège il y avait effectivement des panneaux de signalisation sur les routes indiquant la présence éventuelle de fantômes? Merci. -+- DM in :GNU- Il y a quelque chose de pouri au royaume du neuneu -+-
Bonjour,
On Wed, 29 Oct 2003, jjabon wrote:
et aussi, quel est son principe, (un ptit nain de jardin caché dans le
cpu qui joue au dé ????)
Ca dépend de ton implémentation, mais la plupart du temps, il s'agit d'un
générateur congruentiel linéaire. C'est rapide et facile à faire, et ça
suffit pour des jeux, des stats, des simulations, mais pas pour de la
crypto.
--
Erwann ABALEA <erwann@abalea.com> - RSA PGP Key ID: 0x2D0EABD5
-----
J'aurai aimé savoir si en Norvège il y avait effectivement des panneaux
de signalisation sur les routes indiquant la présence éventuelle de
fantômes? Merci.
-+- DM in :GNU- Il y a quelque chose de pouri au royaume du neuneu -+-
et aussi, quel est son principe, (un ptit nain de jardin caché dans le cpu qui joue au dé ????)
Ca dépend de ton implémentation, mais la plupart du temps, il s'agit d'un générateur congruentiel linéaire. C'est rapide et facile à faire, et ça suffit pour des jeux, des stats, des simulations, mais pas pour de la crypto.
-- Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5 ----- J'aurai aimé savoir si en Norvège il y avait effectivement des panneaux de signalisation sur les routes indiquant la présence éventuelle de fantômes? Merci. -+- DM in :GNU- Il y a quelque chose de pouri au royaume du neuneu -+-
Jean-Marc Bourguet
"Michel Michaud" writes:
Dans news:, Jean-Marc
L'objectif d'une norme, c'est la portabilite. Quel est le probleme a utiliser stdlib.h qui est defini par la norme et plus portable que l'alternative en pratique?
Quel est l'intérêt d'avoir <cstdlib> dans cette norme ?
A partir du moment ou les autres entetes mettent dans le namespace std les choses de la bibliotheque standard, c'est bien d'avoir la meme chose pour ce qui provient du C.
Quel est l'intérêt d'avoir le namespace std ? (je sais, je sais, on pourra dire « quel est l'intérêt d'une norme qui n'est pas suivi par les compilateurs ? »)
Dans l'etat actuel, ca ne *me* sert a rien. Meme si l'implementation de ce point etait homogene, l'interaction avec POSIX qui n'est pas definie risque de me faire continuer a preferer les versions .h (il est sense de continuer de fournier les extensions POSIX uniquement dans les versions .h).
Ce qui ne veut pas dire que ce ne peut pas etre utile a quelqu'un, meme dans l'etat actuel des choses.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
"Michel Michaud" <mm@gdzid.com> writes:
Dans news:pxbvfq7mb0d.fsf@news.bourguet.org, Jean-Marc
L'objectif d'une norme, c'est la portabilite. Quel est le probleme
a utiliser stdlib.h qui est defini par la norme et plus portable que
l'alternative en pratique?
Quel est l'intérêt d'avoir <cstdlib> dans cette norme ?
A partir du moment ou les autres entetes mettent dans le namespace std
les choses de la bibliotheque standard, c'est bien d'avoir la meme
chose pour ce qui provient du C.
Quel est l'intérêt d'avoir le namespace std ?
(je sais, je sais, on pourra dire « quel est l'intérêt d'une norme
qui n'est pas suivi par les compilateurs ? »)
Dans l'etat actuel, ca ne *me* sert a rien. Meme si l'implementation
de ce point etait homogene, l'interaction avec POSIX qui n'est pas
definie risque de me faire continuer a preferer les versions .h (il
est sense de continuer de fournier les extensions POSIX uniquement
dans les versions .h).
Ce qui ne veut pas dire que ce ne peut pas etre utile a quelqu'un,
meme dans l'etat actuel des choses.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
L'objectif d'une norme, c'est la portabilite. Quel est le probleme a utiliser stdlib.h qui est defini par la norme et plus portable que l'alternative en pratique?
Quel est l'intérêt d'avoir <cstdlib> dans cette norme ?
A partir du moment ou les autres entetes mettent dans le namespace std les choses de la bibliotheque standard, c'est bien d'avoir la meme chose pour ce qui provient du C.
Quel est l'intérêt d'avoir le namespace std ? (je sais, je sais, on pourra dire « quel est l'intérêt d'une norme qui n'est pas suivi par les compilateurs ? »)
Dans l'etat actuel, ca ne *me* sert a rien. Meme si l'implementation de ce point etait homogene, l'interaction avec POSIX qui n'est pas definie risque de me faire continuer a preferer les versions .h (il est sense de continuer de fournier les extensions POSIX uniquement dans les versions .h).
Ce qui ne veut pas dire que ce ne peut pas etre utile a quelqu'un, meme dans l'etat actuel des choses.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
kanze
Benoit Dejean wrote in message news:...
et ou est l'erreur ici
#include <iostream> using namespace std; main() { double r = rand(); cout << r; }
mauvais emploi de rand et générateur n'a pas été initialisé
et également chez boost des générateurs beaucoup plus puissants http://boost.org/libs/random/index.html
Surtout, ce sont des générateurs dont la qualité est documentés et garanties. Rien dans la norme empêche l'utilisation d'un Mersenne twister pour rand, non plus. Mais rien ne le garantit, rien ne garantit même la moindre qualité (et en fait, j'ai déjà vu des implémentations où le résultat de rand() altérnait rigueureusement entre pair et impair).
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Benoit Dejean <bnet@ifrance.com> wrote in message
news:<pan.2003.10.29.15.34.12.307172@ifrance.com>...
et ou est l'erreur ici
#include <iostream>
using namespace std;
main()
{
double r = rand();
cout << r;
}
mauvais emploi de rand et générateur n'a pas été initialisé
et également chez boost des générateurs beaucoup plus puissants
http://boost.org/libs/random/index.html
Surtout, ce sont des générateurs dont la qualité est documentés et
garanties. Rien dans la norme empêche l'utilisation d'un Mersenne
twister pour rand, non plus. Mais rien ne le garantit, rien ne garantit
même la moindre qualité (et en fait, j'ai déjà vu des implémentations où
le résultat de rand() altérnait rigueureusement entre pair et impair).
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
et également chez boost des générateurs beaucoup plus puissants http://boost.org/libs/random/index.html
Surtout, ce sont des générateurs dont la qualité est documentés et garanties. Rien dans la norme empêche l'utilisation d'un Mersenne twister pour rand, non plus. Mais rien ne le garantit, rien ne garantit même la moindre qualité (et en fait, j'ai déjà vu des implémentations où le résultat de rand() altérnait rigueureusement entre pair et impair).
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
kanze
"Jean-Marc Molina" wrote in message news:<bnqotf$vnl$...
Il existe pléthore de fonctions mathématiques pour générer des nombres pseudo-aléatoires, en voici une qui j'utilise :
Le mieux c'est de confier cette tâche aux fonctions standards comme rand et srand. Tu peux t'amuser à tester le générateur de ton compilateur en "lançant des dés" et faisant des petites stats, la petite formule que j'utilise s'en sort plutôt bien.
En es-tu sûr ? Il contradit tout ce que j'ai pu lire sur la génération des nombres aléatoire. En fin de compte, c'est un générateur très mauvais, dont on a cherché à camoufler les défauts au moyen d'un décalage. (Sans le décalage, en lançant un pair de dé, on ne voit jamais un nombre impair, par exemple.)
Pour un générateur simple, j'utilise la formule suivante :
long rand() { long long tmp = randomState ; tmp = (48271 * tmp) % 2147483647 ; randomState = tmp ; return tmp - 1 ; }
Ça donne d'assez bon résultats sur la plupart des tests, mais n'est pas sans défauts -- un nombre très petit est toujours suivi d'un nombre très grand, par exemple.
Note que pour fonctionner correctement, cette formule a besoin d'un arithmétique d'au moins 48 bits. D'où le long long -- sous Windows, utilise __int64.
Pour des applications plus exigeantes, j'utilise un pair de générateurs.
C'était l'une des plus plébiscitées dans l'ouvrage que j'avais consulté.
Quel ouvrage ? (Le mien est basé sur « Random Number Generators: Good Ones Are Hard to Find », par Park et Miller, CACM, Oct. 1988. Qui lui-même se base en partie sur « The Art of Computer Programming, Volume 2 », de Donald Knuth. Les deux constantes magiques ci-dessus en sont tirées des Errata du Knuth.)
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
"Jean-Marc Molina" <goa_pasdepourriel_@ifrance.com> wrote in message
news:<bnqotf$vnl$1@news-reader3.wanadoo.fr>...
Il existe pléthore de fonctions mathématiques pour générer des nombres
pseudo-aléatoires, en voici une qui j'utilise :
Le mieux c'est de confier cette tâche aux fonctions standards comme
rand et srand. Tu peux t'amuser à tester le générateur de ton
compilateur en "lançant des dés" et faisant des petites stats, la
petite formule que j'utilise s'en sort plutôt bien.
En es-tu sûr ? Il contradit tout ce que j'ai pu lire sur la génération
des nombres aléatoire. En fin de compte, c'est un générateur très
mauvais, dont on a cherché à camoufler les défauts au moyen d'un
décalage. (Sans le décalage, en lançant un pair de dé, on ne voit jamais
un nombre impair, par exemple.)
Pour un générateur simple, j'utilise la formule suivante :
long
rand()
{
long long tmp = randomState ;
tmp = (48271 * tmp) % 2147483647 ;
randomState = tmp ;
return tmp - 1 ;
}
Ça donne d'assez bon résultats sur la plupart des tests, mais n'est pas
sans défauts -- un nombre très petit est toujours suivi d'un nombre très
grand, par exemple.
Note que pour fonctionner correctement, cette formule a besoin d'un
arithmétique d'au moins 48 bits. D'où le long long -- sous Windows,
utilise __int64.
Pour des applications plus exigeantes, j'utilise un pair de générateurs.
C'était l'une des plus plébiscitées dans l'ouvrage que j'avais
consulté.
Quel ouvrage ? (Le mien est basé sur « Random Number Generators: Good
Ones Are Hard to Find », par Park et Miller, CACM, Oct. 1988. Qui
lui-même se base en partie sur « The Art of Computer Programming, Volume
2 », de Donald Knuth. Les deux constantes magiques ci-dessus en sont
tirées des Errata du Knuth.)
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Le mieux c'est de confier cette tâche aux fonctions standards comme rand et srand. Tu peux t'amuser à tester le générateur de ton compilateur en "lançant des dés" et faisant des petites stats, la petite formule que j'utilise s'en sort plutôt bien.
En es-tu sûr ? Il contradit tout ce que j'ai pu lire sur la génération des nombres aléatoire. En fin de compte, c'est un générateur très mauvais, dont on a cherché à camoufler les défauts au moyen d'un décalage. (Sans le décalage, en lançant un pair de dé, on ne voit jamais un nombre impair, par exemple.)
Pour un générateur simple, j'utilise la formule suivante :
long rand() { long long tmp = randomState ; tmp = (48271 * tmp) % 2147483647 ; randomState = tmp ; return tmp - 1 ; }
Ça donne d'assez bon résultats sur la plupart des tests, mais n'est pas sans défauts -- un nombre très petit est toujours suivi d'un nombre très grand, par exemple.
Note que pour fonctionner correctement, cette formule a besoin d'un arithmétique d'au moins 48 bits. D'où le long long -- sous Windows, utilise __int64.
Pour des applications plus exigeantes, j'utilise un pair de générateurs.
C'était l'une des plus plébiscitées dans l'ouvrage que j'avais consulté.
Quel ouvrage ? (Le mien est basé sur « Random Number Generators: Good Ones Are Hard to Find », par Park et Miller, CACM, Oct. 1988. Qui lui-même se base en partie sur « The Art of Computer Programming, Volume 2 », de Donald Knuth. Les deux constantes magiques ci-dessus en sont tirées des Errata du Knuth.)
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
un.gabacho.sans.pourrier
writes:
Qui lui-même se base en partie sur « The Art of Computer Programming, Volume 2 », de Donald Knuth. Les deux constantes magiques ci-dessus en sont tirées des Errata du Knuth.
On ne peut que recommander la lecture de ce dernier qui illustre très joliment le principe « les générateurs aléatoires ça ne se fait pas au hasard ».
kanze@gabi-soft.fr writes:
Qui lui-même se base en partie sur « The Art of Computer
Programming, Volume 2 », de Donald Knuth. Les deux constantes
magiques ci-dessus en sont tirées des Errata du Knuth.
On ne peut que recommander la lecture de ce dernier qui illustre très
joliment le principe « les générateurs aléatoires ça ne se fait pas au
hasard ».
Qui lui-même se base en partie sur « The Art of Computer Programming, Volume 2 », de Donald Knuth. Les deux constantes magiques ci-dessus en sont tirées des Errata du Knuth.
On ne peut que recommander la lecture de ce dernier qui illustre très joliment le principe « les générateurs aléatoires ça ne se fait pas au hasard ».