en pascal write(123.456) renvoie 123.456.
et write(123.456:7:4") renvoie 123.4560
en c++ "cout << 123.456" renvoie 123.456000
cout << setprecision(0) << 123.456 renverra 123
... etc
donc on ne peut pas avoir un nombre de décimales flottant avec
ostream c'est bien ça ?
et il n'y a pas d'équivalent de sprintf en c++ à part
ostringstream
en pascal write(123.456) renvoie 123.456.
et write(123.456:7:4") renvoie 123.4560
en c++ "cout << 123.456" renvoie 123.456000
cout << setprecision(0) << 123.456 renverra 123
... etc
donc on ne peut pas avoir un nombre de décimales flottant avec
ostream c'est bien ça ?
et il n'y a pas d'équivalent de sprintf en c++ à part
ostringstream
en pascal write(123.456) renvoie 123.456.
et write(123.456:7:4") renvoie 123.4560
en c++ "cout << 123.456" renvoie 123.456000
cout << setprecision(0) << 123.456 renverra 123
... etc
donc on ne peut pas avoir un nombre de décimales flottant avec
ostream c'est bien ça ?
et il n'y a pas d'équivalent de sprintf en c++ à part
ostringstream
en pascal write(123.456) renvoie 123.456.
Vraiment ? C'est un hasard intéressant...
Que veux-tu exactement ?
Essaie toujours :
cout << fixed << right << setw(10) << setprecision(4) << 123.456;
Ça donnera bb123.4560 (je mets b pour les blancs).
En jouant avec le setw et le setprecision, tu devrais pouvoir
obtenir ce que tu veux...
Pourquoi « à part ostringstream » ? Un remplacement, ça ne te
suffit pas ? (en fait, il y a aussi ostrstream, moins utile en
général)
en pascal write(123.456) renvoie 123.456.
Vraiment ? C'est un hasard intéressant...
Que veux-tu exactement ?
Essaie toujours :
cout << fixed << right << setw(10) << setprecision(4) << 123.456;
Ça donnera bb123.4560 (je mets b pour les blancs).
En jouant avec le setw et le setprecision, tu devrais pouvoir
obtenir ce que tu veux...
Pourquoi « à part ostringstream » ? Un remplacement, ça ne te
suffit pas ? (en fait, il y a aussi ostrstream, moins utile en
général)
en pascal write(123.456) renvoie 123.456.
Vraiment ? C'est un hasard intéressant...
Que veux-tu exactement ?
Essaie toujours :
cout << fixed << right << setw(10) << setprecision(4) << 123.456;
Ça donnera bb123.4560 (je mets b pour les blancs).
En jouant avec le setw et le setprecision, tu devrais pouvoir
obtenir ce que tu veux...
Pourquoi « à part ostringstream » ? Un remplacement, ça ne te
suffit pas ? (en fait, il y a aussi ostrstream, moins utile en
général)
en pascal write(123.456) renvoie 123.456.
Vraiment ? C'est un hasard intéressant...
:-)Que veux-tu exactement ?
cout << 1.23 << " - " << 1.1 << " = " << 0.13 << endl;
==> 1.23 - 1.1 = 0.13
et non
==> 1.230000 - 1.100000 = 0.130000 :-)
parce que pour l'écrire il faut
cout << fixed << setprecision(2) << 1.23 << " - " << setprecision(1) << 1.1
<< " = " << setprecision(2) << 0.13 << endl;
j'ai pris cet exemple parce qu'il montre que je dois connaitre le nombre de
décimales pour qu'il n'affiche pas de 0 inutiles.
------------
j'en ai trouvé une autre bizarrerie :
string(source, len); // ou string(string, int)
nécessite que source ait au moins len caractères.
alors que string(source) ne rempli pas avec des caractères
aléatoires.
comment donc empêcher un buffer overflow (ou un mem overflow)
si on ne peut tronquer une string dès à la construction de la chaine ?
en pascal write(123.456) renvoie 123.456.
Vraiment ? C'est un hasard intéressant...
:-)
Que veux-tu exactement ?
cout << 1.23 << " - " << 1.1 << " = " << 0.13 << endl;
==> 1.23 - 1.1 = 0.13
et non
==> 1.230000 - 1.100000 = 0.130000 :-)
parce que pour l'écrire il faut
cout << fixed << setprecision(2) << 1.23 << " - " << setprecision(1) << 1.1
<< " = " << setprecision(2) << 0.13 << endl;
j'ai pris cet exemple parce qu'il montre que je dois connaitre le nombre de
décimales pour qu'il n'affiche pas de 0 inutiles.
------------
j'en ai trouvé une autre bizarrerie :
string(source, len); // ou string(string, int)
nécessite que source ait au moins len caractères.
alors que string(source) ne rempli pas avec des caractères
aléatoires.
comment donc empêcher un buffer overflow (ou un mem overflow)
si on ne peut tronquer une string dès à la construction de la chaine ?
en pascal write(123.456) renvoie 123.456.
Vraiment ? C'est un hasard intéressant...
:-)Que veux-tu exactement ?
cout << 1.23 << " - " << 1.1 << " = " << 0.13 << endl;
==> 1.23 - 1.1 = 0.13
et non
==> 1.230000 - 1.100000 = 0.130000 :-)
parce que pour l'écrire il faut
cout << fixed << setprecision(2) << 1.23 << " - " << setprecision(1) << 1.1
<< " = " << setprecision(2) << 0.13 << endl;
j'ai pris cet exemple parce qu'il montre que je dois connaitre le nombre de
décimales pour qu'il n'affiche pas de 0 inutiles.
------------
j'en ai trouvé une autre bizarrerie :
string(source, len); // ou string(string, int)
nécessite que source ait au moins len caractères.
alors que string(source) ne rempli pas avec des caractères
aléatoires.
comment donc empêcher un buffer overflow (ou un mem overflow)
si on ne peut tronquer une string dès à la construction de la chaine ?
cout << 1.23 << " - " << 1.1 << " = " << 0.13 << endl;
==> 1.23 - 1.1 = 0.13
et non
==> 1.230000 - 1.100000 = 0.130000 :-)
parce que pour l'écrire il faut
cout << fixed << setprecision(2) << 1.23 << " - " << setprecision(1) <<
1.1 << " = " << setprecision(2) << 0.13 << endl;
j'en ai trouvé une autre bizarrerie :
string(source, len); // ou string(string, int)
nécessite que source ait au moins len caractères.
alors que string(source) ne rempli pas avec des caractères
aléatoires.
comment donc empêcher un buffer overflow (ou un mem overflow)
si on ne peut tronquer une string dès à la construction de la chaine ?
cout << 1.23 << " - " << 1.1 << " = " << 0.13 << endl;
==> 1.23 - 1.1 = 0.13
et non
==> 1.230000 - 1.100000 = 0.130000 :-)
parce que pour l'écrire il faut
cout << fixed << setprecision(2) << 1.23 << " - " << setprecision(1) <<
1.1 << " = " << setprecision(2) << 0.13 << endl;
j'en ai trouvé une autre bizarrerie :
string(source, len); // ou string(string, int)
nécessite que source ait au moins len caractères.
alors que string(source) ne rempli pas avec des caractères
aléatoires.
comment donc empêcher un buffer overflow (ou un mem overflow)
si on ne peut tronquer une string dès à la construction de la chaine ?
cout << 1.23 << " - " << 1.1 << " = " << 0.13 << endl;
==> 1.23 - 1.1 = 0.13
et non
==> 1.230000 - 1.100000 = 0.130000 :-)
parce que pour l'écrire il faut
cout << fixed << setprecision(2) << 1.23 << " - " << setprecision(1) <<
1.1 << " = " << setprecision(2) << 0.13 << endl;
j'en ai trouvé une autre bizarrerie :
string(source, len); // ou string(string, int)
nécessite que source ait au moins len caractères.
alors que string(source) ne rempli pas avec des caractères
aléatoires.
comment donc empêcher un buffer overflow (ou un mem overflow)
si on ne peut tronquer une string dès à la construction de la chaine ?
cout << fixed
<< 1.23 << " - " << 1.1 << " = " << 0.13 << endl
<< resetiosflags(ios_base:: floatfield)
<< 1.23 << " - " << 1.1 << " = " << 0.13 << endl;
.....
comment donc empêcher un buffer overflow (ou un mem overflow)
si on ne peut tronquer une string dès à la construction de la chaine ?
J'ai pas compris le problème.
cout << fixed
<< 1.23 << " - " << 1.1 << " = " << 0.13 << endl
<< resetiosflags(ios_base:: floatfield)
<< 1.23 << " - " << 1.1 << " = " << 0.13 << endl;
.....
comment donc empêcher un buffer overflow (ou un mem overflow)
si on ne peut tronquer une string dès à la construction de la chaine ?
J'ai pas compris le problème.
cout << fixed
<< 1.23 << " - " << 1.1 << " = " << 0.13 << endl
<< resetiosflags(ios_base:: floatfield)
<< 1.23 << " - " << 1.1 << " = " << 0.13 << endl;
.....
comment donc empêcher un buffer overflow (ou un mem overflow)
si on ne peut tronquer une string dès à la construction de la chaine ?
J'ai pas compris le problème.
(Currency est à peu près l'équivalent de celle de BC++ sauf qu'elle
fonctionne sous Linux et est basé sur du long 32 bits et 64 quand les
cpu des pc changeront)
class Budget
{
public:
const string &category;
const string &name;
const Currency &value;
Budget(char * c, char *n, Currency v);
private:
string categorie;
string nom;
Currency valeur;
}
char * est indispensable pour des problèmes de portabilité, je converti mon
prog Qt en STL
et doit compiler sous g++ sous nux et BC sous win, (hors forum mais
précision peut être utile)
donc :
Budget::Budget(char *c, char *n; Currency v)
: category(categorie), name(nom), value(valeur)
{
categorie = string(c, 80); // oui je sais, au dessus avec les ":" ;-)
......
mon problème est que d'après le bouquin (donc la norme)
si c est trop court, ça passera pas
Donc c'est le constructeur
je peux donc essayer categorie = string(c)
imaginons maintenant que strlen(c) = 35478945231
le beau plaf du constructeur
en C, j'aurais pu faire strncpy( temp, c, 80);
en C++ je suis coincé.
si vous avez une idée ...
une dernière et je vous embête plus :
j'ai découvert random_shuffle(it, it, rand_func) ce midi et ai testé ça tout
à l"heure.
comme pour tous les random, le rnd initial est nécessaire, mais j'ai pas
trouvé
où ....
(Currency est à peu près l'équivalent de celle de BC++ sauf qu'elle
fonctionne sous Linux et est basé sur du long 32 bits et 64 quand les
cpu des pc changeront)
class Budget
{
public:
const string &category;
const string &name;
const Currency &value;
Budget(char * c, char *n, Currency v);
private:
string categorie;
string nom;
Currency valeur;
}
char * est indispensable pour des problèmes de portabilité, je converti mon
prog Qt en STL
et doit compiler sous g++ sous nux et BC sous win, (hors forum mais
précision peut être utile)
donc :
Budget::Budget(char *c, char *n; Currency v)
: category(categorie), name(nom), value(valeur)
{
categorie = string(c, 80); // oui je sais, au dessus avec les ":" ;-)
......
mon problème est que d'après le bouquin (donc la norme)
si c est trop court, ça passera pas
Donc c'est le constructeur
je peux donc essayer categorie = string(c)
imaginons maintenant que strlen(c) = 35478945231
le beau plaf du constructeur
en C, j'aurais pu faire strncpy( temp, c, 80);
en C++ je suis coincé.
si vous avez une idée ...
une dernière et je vous embête plus :
j'ai découvert random_shuffle(it, it, rand_func) ce midi et ai testé ça tout
à l"heure.
comme pour tous les random, le rnd initial est nécessaire, mais j'ai pas
trouvé
où ....
(Currency est à peu près l'équivalent de celle de BC++ sauf qu'elle
fonctionne sous Linux et est basé sur du long 32 bits et 64 quand les
cpu des pc changeront)
class Budget
{
public:
const string &category;
const string &name;
const Currency &value;
Budget(char * c, char *n, Currency v);
private:
string categorie;
string nom;
Currency valeur;
}
char * est indispensable pour des problèmes de portabilité, je converti mon
prog Qt en STL
et doit compiler sous g++ sous nux et BC sous win, (hors forum mais
précision peut être utile)
donc :
Budget::Budget(char *c, char *n; Currency v)
: category(categorie), name(nom), value(valeur)
{
categorie = string(c, 80); // oui je sais, au dessus avec les ":" ;-)
......
mon problème est que d'après le bouquin (donc la norme)
si c est trop court, ça passera pas
Donc c'est le constructeur
je peux donc essayer categorie = string(c)
imaginons maintenant que strlen(c) = 35478945231
le beau plaf du constructeur
en C, j'aurais pu faire strncpy( temp, c, 80);
en C++ je suis coincé.
si vous avez une idée ...
une dernière et je vous embête plus :
j'ai découvert random_shuffle(it, it, rand_func) ce midi et ai testé ça tout
à l"heure.
comme pour tous les random, le rnd initial est nécessaire, mais j'ai pas
trouvé
où ....
je répond à Jean Marc et à Falk en même temps :
(je suis passé sous windows depuis ma prédécente réponse)cout << fixed
<< 1.23 << " - " << 1.1 << " = " << 0.13 << endl
<< resetiosflags(ios_base:: floatfield)
<< 1.23 << " - " << 1.1 << " = " << 0.13 << endl;
.....
resetiosflag et std::cout.unsetf(std::ios::fixed) donnent exactement
ce que vous dîtes et ici aussi ... sous win :-)
j'ai essayé bc 6.0 et gcc 3.3 (cygwin)
par contre sous nux que j'utilise d'habitude ça ne fonctionne pas
avec gcc 2.95 et gcc 3.0 ne donne pas toujours les bons résultat
suivant les test que je fais avec.
je répond à Jean Marc et à Falk en même temps :
(je suis passé sous windows depuis ma prédécente réponse)
cout << fixed
<< 1.23 << " - " << 1.1 << " = " << 0.13 << endl
<< resetiosflags(ios_base:: floatfield)
<< 1.23 << " - " << 1.1 << " = " << 0.13 << endl;
.....
resetiosflag et std::cout.unsetf(std::ios::fixed) donnent exactement
ce que vous dîtes et ici aussi ... sous win :-)
j'ai essayé bc 6.0 et gcc 3.3 (cygwin)
par contre sous nux que j'utilise d'habitude ça ne fonctionne pas
avec gcc 2.95 et gcc 3.0 ne donne pas toujours les bons résultat
suivant les test que je fais avec.
je répond à Jean Marc et à Falk en même temps :
(je suis passé sous windows depuis ma prédécente réponse)cout << fixed
<< 1.23 << " - " << 1.1 << " = " << 0.13 << endl
<< resetiosflags(ios_base:: floatfield)
<< 1.23 << " - " << 1.1 << " = " << 0.13 << endl;
.....
resetiosflag et std::cout.unsetf(std::ios::fixed) donnent exactement
ce que vous dîtes et ici aussi ... sous win :-)
j'ai essayé bc 6.0 et gcc 3.3 (cygwin)
par contre sous nux que j'utilise d'habitude ça ne fonctionne pas
avec gcc 2.95 et gcc 3.0 ne donne pas toujours les bons résultat
suivant les test que je fais avec.
par contre sous nux que j'utilise d'habitude ça ne fonctionne pas
avec gcc 2.95 et gcc 3.0 ne donne pas toujours les bons résultat
suivant les test que je fais avec.
moralité Debian woody grrrr et ça devient hors sujet pour le groupe
je vais donc voir du côté de mon os (peut-être stlport qui sait)
par contre sous nux que j'utilise d'habitude ça ne fonctionne pas
avec gcc 2.95 et gcc 3.0 ne donne pas toujours les bons résultat
suivant les test que je fais avec.
moralité Debian woody grrrr et ça devient hors sujet pour le groupe
je vais donc voir du côté de mon os (peut-être stlport qui sait)
par contre sous nux que j'utilise d'habitude ça ne fonctionne pas
avec gcc 2.95 et gcc 3.0 ne donne pas toujours les bons résultat
suivant les test que je fais avec.
moralité Debian woody grrrr et ça devient hors sujet pour le groupe
je vais donc voir du côté de mon os (peut-être stlport qui sait)
Alain Cabiran wrote:(Currency est à peu près l'équivalent de celle de BC++ sauf qu'elle
fonctionne sous Linux et est basé sur du long 32 bits et 64 quand
les cpu des pc changeront)
class Budget
{
public:
const string &category;
const string &name;
const Currency &value;
Budget(char * c, char *n, Currency v);
private:
string categorie;
string nom;
Currency valeur;
}
char * est indispensable pour des problèmes de portabilité, je
converti mon
AMA plutôt 'char const*' ? Sinon tu ne pourras pas passer des chaînes
constantes...prog Qt en STL et doit compiler sous g++ sous nux et BC sous win,
(hors forum mais précision peut être utile)
donc :
Budget::Budget(char *c, char *n; Currency v)
: category(categorie), name(nom), value(valeur)
{
categorie = string(c, 80); // oui je sais, au dessus avec les ":" ;-)
......
mon problème est que d'après le bouquin (donc la norme)
si c est trop court, ça passera pas
Donc c'est le constructeur
basic_string(const charT* s, size_type n,
const Allocator& a = Allocator());
qui sera appelé (cf § 21.3.1/6-8).
Apparemment tu cherches
: ..., categorie(c, std::min(std::strlen(c), std::size_t(80)))
je peux donc essayer categorie = string(c)
imaginons maintenant que strlen(c) = 35478945231
le beau plaf du constructeur
Ton 'c' vient d'où alors ? L'intérêt des std::string est justement de
ne pas être obligé de couper les chaînes à cause d'utilisation des
buffeurs de taille fixe ! Par contre, si 'c' est un pointeur invalide
(NULL, non initialisé ou pointant sur une zone de mémoire libérée),
effectivement ça se passera mal...
en C, j'aurais pu faire strncpy( temp, c, 80);
en C++ je suis coincé.
si vous avez une idée ...
Voir ci-dessus.une dernière et je vous embête plus :
j'ai découvert random_shuffle(it, it, rand_func) ce midi et ai testé ça tout
à l"heure.
comme pour tous les random, le rnd initial est nécessaire, mais j'ai pas
trouvé
où ....
Tu peux simplement appeler std::random_shuffle(it_begin, in_end) mais
ni le générateur de nombres aléatoires ni la façon d'initialiser son
seed sont spécifiés dans la Norme (§ 25.2.11). Si le résultat n'est
pas assez aléatoire pour toi, tu peux utiliser ton propre générateur
qui gère son seed. Exemple (il y en a d'autres sur le Web) :
_________________________________________________________________________
#include <algorithm>
#include <iostream>
#include <ostream>
#include <iterator>
// See <http://www.gnu.org/software/gsl/manual/gsl-ref_17.html>,
// "Generator: gsl_rng_knuthran2"
class SuperDuperRng
{
static unsigned long long const a1 = 271828183;
static unsigned long long const a2 = 314159269;
static unsigned long long const m = (1UL << 31) - 1;
unsigned long xn, xn_1;
public:
SuperDuperRng(unsigned long u1, unsigned long u0=0)
: xn(u1), xn_1(u0)
{
if(xn==0 && xn_1==0)
xnG11; // Won't get very random numbers otherwise
Alain Cabiran wrote:
(Currency est à peu près l'équivalent de celle de BC++ sauf qu'elle
fonctionne sous Linux et est basé sur du long 32 bits et 64 quand
les cpu des pc changeront)
class Budget
{
public:
const string &category;
const string &name;
const Currency &value;
Budget(char * c, char *n, Currency v);
private:
string categorie;
string nom;
Currency valeur;
}
char * est indispensable pour des problèmes de portabilité, je
converti mon
AMA plutôt 'char const*' ? Sinon tu ne pourras pas passer des chaînes
constantes...
prog Qt en STL et doit compiler sous g++ sous nux et BC sous win,
(hors forum mais précision peut être utile)
donc :
Budget::Budget(char *c, char *n; Currency v)
: category(categorie), name(nom), value(valeur)
{
categorie = string(c, 80); // oui je sais, au dessus avec les ":" ;-)
......
mon problème est que d'après le bouquin (donc la norme)
si c est trop court, ça passera pas
Donc c'est le constructeur
basic_string(const charT* s, size_type n,
const Allocator& a = Allocator());
qui sera appelé (cf § 21.3.1/6-8).
Apparemment tu cherches
: ..., categorie(c, std::min(std::strlen(c), std::size_t(80)))
je peux donc essayer categorie = string(c)
imaginons maintenant que strlen(c) = 35478945231
le beau plaf du constructeur
Ton 'c' vient d'où alors ? L'intérêt des std::string est justement de
ne pas être obligé de couper les chaînes à cause d'utilisation des
buffeurs de taille fixe ! Par contre, si 'c' est un pointeur invalide
(NULL, non initialisé ou pointant sur une zone de mémoire libérée),
effectivement ça se passera mal...
en C, j'aurais pu faire strncpy( temp, c, 80);
en C++ je suis coincé.
si vous avez une idée ...
Voir ci-dessus.
une dernière et je vous embête plus :
j'ai découvert random_shuffle(it, it, rand_func) ce midi et ai testé ça tout
à l"heure.
comme pour tous les random, le rnd initial est nécessaire, mais j'ai pas
trouvé
où ....
Tu peux simplement appeler std::random_shuffle(it_begin, in_end) mais
ni le générateur de nombres aléatoires ni la façon d'initialiser son
seed sont spécifiés dans la Norme (§ 25.2.11). Si le résultat n'est
pas assez aléatoire pour toi, tu peux utiliser ton propre générateur
qui gère son seed. Exemple (il y en a d'autres sur le Web) :
_________________________________________________________________________
#include <algorithm>
#include <iostream>
#include <ostream>
#include <iterator>
// See <http://www.gnu.org/software/gsl/manual/gsl-ref_17.html>,
// "Generator: gsl_rng_knuthran2"
class SuperDuperRng
{
static unsigned long long const a1 = 271828183;
static unsigned long long const a2 = 314159269;
static unsigned long long const m = (1UL << 31) - 1;
unsigned long xn, xn_1;
public:
SuperDuperRng(unsigned long u1, unsigned long u0=0)
: xn(u1), xn_1(u0)
{
if(xn==0 && xn_1==0)
xnG11; // Won't get very random numbers otherwise
Alain Cabiran wrote:(Currency est à peu près l'équivalent de celle de BC++ sauf qu'elle
fonctionne sous Linux et est basé sur du long 32 bits et 64 quand
les cpu des pc changeront)
class Budget
{
public:
const string &category;
const string &name;
const Currency &value;
Budget(char * c, char *n, Currency v);
private:
string categorie;
string nom;
Currency valeur;
}
char * est indispensable pour des problèmes de portabilité, je
converti mon
AMA plutôt 'char const*' ? Sinon tu ne pourras pas passer des chaînes
constantes...prog Qt en STL et doit compiler sous g++ sous nux et BC sous win,
(hors forum mais précision peut être utile)
donc :
Budget::Budget(char *c, char *n; Currency v)
: category(categorie), name(nom), value(valeur)
{
categorie = string(c, 80); // oui je sais, au dessus avec les ":" ;-)
......
mon problème est que d'après le bouquin (donc la norme)
si c est trop court, ça passera pas
Donc c'est le constructeur
basic_string(const charT* s, size_type n,
const Allocator& a = Allocator());
qui sera appelé (cf § 21.3.1/6-8).
Apparemment tu cherches
: ..., categorie(c, std::min(std::strlen(c), std::size_t(80)))
je peux donc essayer categorie = string(c)
imaginons maintenant que strlen(c) = 35478945231
le beau plaf du constructeur
Ton 'c' vient d'où alors ? L'intérêt des std::string est justement de
ne pas être obligé de couper les chaînes à cause d'utilisation des
buffeurs de taille fixe ! Par contre, si 'c' est un pointeur invalide
(NULL, non initialisé ou pointant sur une zone de mémoire libérée),
effectivement ça se passera mal...
en C, j'aurais pu faire strncpy( temp, c, 80);
en C++ je suis coincé.
si vous avez une idée ...
Voir ci-dessus.une dernière et je vous embête plus :
j'ai découvert random_shuffle(it, it, rand_func) ce midi et ai testé ça tout
à l"heure.
comme pour tous les random, le rnd initial est nécessaire, mais j'ai pas
trouvé
où ....
Tu peux simplement appeler std::random_shuffle(it_begin, in_end) mais
ni le générateur de nombres aléatoires ni la façon d'initialiser son
seed sont spécifiés dans la Norme (§ 25.2.11). Si le résultat n'est
pas assez aléatoire pour toi, tu peux utiliser ton propre générateur
qui gère son seed. Exemple (il y en a d'autres sur le Web) :
_________________________________________________________________________
#include <algorithm>
#include <iostream>
#include <ostream>
#include <iterator>
// See <http://www.gnu.org/software/gsl/manual/gsl-ref_17.html>,
// "Generator: gsl_rng_knuthran2"
class SuperDuperRng
{
static unsigned long long const a1 = 271828183;
static unsigned long long const a2 = 314159269;
static unsigned long long const m = (1UL << 31) - 1;
unsigned long xn, xn_1;
public:
SuperDuperRng(unsigned long u1, unsigned long u0=0)
: xn(u1), xn_1(u0)
{
if(xn==0 && xn_1==0)
xnG11; // Won't get very random numbers otherwise
C'est vrai que quelques coups de string(c) avec un c où strlen(c) vaut
35478945231, ça pourrait poser des problèmes sur beaucoup de systèmes.
Du genre bad_alloc. D'ailleurs, l'existance même d'une chaîne (C ou
std::string) de cette taille est impossible sur pas mal des machines.
Si le poster a réelement à gerer des chaînes de cette longueur, il se
peut bien qu'il a besoin des moyens spéciaux.
Dans les milieux internationaux, 42 est la valeur
préférée, mais les allemands semblent préférer 4711.
C'est vrai que quelques coups de string(c) avec un c où strlen(c) vaut
35478945231, ça pourrait poser des problèmes sur beaucoup de systèmes.
Du genre bad_alloc. D'ailleurs, l'existance même d'une chaîne (C ou
std::string) de cette taille est impossible sur pas mal des machines.
Si le poster a réelement à gerer des chaînes de cette longueur, il se
peut bien qu'il a besoin des moyens spéciaux.
Dans les milieux internationaux, 42 est la valeur
préférée, mais les allemands semblent préférer 4711.
C'est vrai que quelques coups de string(c) avec un c où strlen(c) vaut
35478945231, ça pourrait poser des problèmes sur beaucoup de systèmes.
Du genre bad_alloc. D'ailleurs, l'existance même d'une chaîne (C ou
std::string) de cette taille est impossible sur pas mal des machines.
Si le poster a réelement à gerer des chaînes de cette longueur, il se
peut bien qu'il a besoin des moyens spéciaux.
Dans les milieux internationaux, 42 est la valeur
préférée, mais les allemands semblent préférer 4711.