pi est une constante facile a exprimer dans une base variable et ce programme effectue le changement de base. Je crois que j'ai donne assez de renseignement pour montrer que je comprends le programme; je merite donc le chocolat. mmmh... non, je crois juste que tu as lu le même article que moi un jour,
mais je t'envoie le chocolat si tu peux expliquer ce qu'est une base variable et pourquoi pi est "simple" dans cette base. Ou si tu produis un programme semblable pour e... -- Philippe Guglielmetti - www.dynabits.com
pi est une constante facile a exprimer dans une base variable et ce
programme effectue le changement de base. Je crois que j'ai donne
assez de renseignement pour montrer que je comprends le programme; je
merite donc le chocolat.
mmmh... non, je crois juste que tu as lu le même article que moi un jour,
mais
je t'envoie le chocolat si tu peux expliquer ce qu'est une base variable et
pourquoi
pi est "simple" dans cette base. Ou si tu produis un programme semblable
pour e...
--
Philippe Guglielmetti - www.dynabits.com
pi est une constante facile a exprimer dans une base variable et ce programme effectue le changement de base. Je crois que j'ai donne assez de renseignement pour montrer que je comprends le programme; je merite donc le chocolat. mmmh... non, je crois juste que tu as lu le même article que moi un jour,
mais je t'envoie le chocolat si tu peux expliquer ce qu'est une base variable et pourquoi pi est "simple" dans cette base. Ou si tu produis un programme semblable pour e... -- Philippe Guglielmetti - www.dynabits.com
Benoit Dejean
Le Mon, 27 Oct 2003 15:30:59 +0100, Fabien LE LEZ a écrit :
On Mon, 27 Oct 2003 14:32:12 +0100, "Nico" wrote:
comment trouver une valeur suffisamment proche de pi ??
M_PI
ahah t'es pris la main dans la sac :oD http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc0011.html#q_8
Le Mon, 27 Oct 2003 15:30:59 +0100, Fabien LE LEZ a écrit :
On Mon, 27 Oct 2003 14:32:12 +0100, "Nico" <lepro.nico@caramail.com>
wrote:
comment trouver une valeur suffisamment proche de pi ??
M_PI
ahah t'es pris la main dans la sac :oD
http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc0011.html#q_8
celui qui explique comment ça marche gagne une plaque de chocolat suisse.
C'est une version de l'algorithme compte-goutte (spigot algorithm) : pi = 2 + 1/3 * (2 + 2/5 * (2 + 3 / 7 * (2 + ... )))
le code C ci-dessus calcul 1000 * pi (sans afficher la virgule) et produit 15000 décimale de pi.
-- Richard
Jean-Marc Bourguet
"Philippe Guglielmetti" writes:
pi est une constante facile a exprimer dans une base variable et ce programme effectue le changement de base. Je crois que j'ai donne assez de renseignement pour montrer que je comprends le programme; je merite donc le chocolat.
mmmh... non, je crois juste que tu as lu le même article que moi un jour, mais je t'envoie le chocolat si tu peux expliquer ce qu'est une base variable
livre, shillings, pence
Les chiffres ne sont pas a multipler avec des puissances successives d'un meme nombre.
et pourquoi pi est "simple" dans cette base. Ou si tu produis un programme semblable pour e...
Ca attendra que je rentre a la maison, si les enfants me laisse jouer avec l'ordi.
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
pi est une constante facile a exprimer dans une base variable et ce
programme effectue le changement de base. Je crois que j'ai donne
assez de renseignement pour montrer que je comprends le programme; je
merite donc le chocolat.
mmmh... non, je crois juste que tu as lu le même article que moi un
jour, mais je t'envoie le chocolat si tu peux expliquer ce qu'est
une base variable
livre, shillings, pence
Les chiffres ne sont pas a multipler avec des puissances successives
d'un meme nombre.
et pourquoi pi est "simple" dans cette base. Ou si tu produis un
programme semblable pour e...
Ca attendra que je rentre a la maison, si les enfants me laisse jouer
avec l'ordi.
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
pi est une constante facile a exprimer dans une base variable et ce programme effectue le changement de base. Je crois que j'ai donne assez de renseignement pour montrer que je comprends le programme; je merite donc le chocolat.
mmmh... non, je crois juste que tu as lu le même article que moi un jour, mais je t'envoie le chocolat si tu peux expliquer ce qu'est une base variable
livre, shillings, pence
Les chiffres ne sont pas a multipler avec des puissances successives d'un meme nombre.
et pourquoi pi est "simple" dans cette base. Ou si tu produis un programme semblable pour e...
Ca attendra que je rentre a la maison, si les enfants me laisse jouer avec l'ordi.
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 Bourguet
Jean-Marc Bourguet writes:
"Philippe Guglielmetti" writes:
pi est une constante facile a exprimer dans une base variable et ce programme effectue le changement de base. Je crois que j'ai donne assez de renseignement pour montrer que je comprends le programme; je merite donc le chocolat.
mmmh... non, je crois juste que tu as lu le même article que moi un jour, mais je t'envoie le chocolat si tu peux expliquer ce qu'est une base variable
livre, shillings, pence
Les chiffres ne sont pas a multipler avec des puissances successives d'un meme nombre.
et pourquoi pi est "simple" dans cette base. Ou si tu produis un programme semblable pour e...
Ca attendra que je rentre a la maison, si les enfants me laisse jouer avec l'ordi.
Le plus simple des deux, c'est le programme pour
e = 2 + 1/2(1 + 1/3 (1 + ...
tellment simple que ca n'a pas besoin d'attendre que je rentre a la maison, juste que j'ai a attendre que cet ordinateur finisse son travail. Redemonter la formule pour pi est un peu plus complexe (bien qu'elle soit connue depuis pas mal de temps). Et je ne suis pas sur qu'une demonstration soit une explication.
int const nbDigits = 1000; int const decimalBase = 100000; int const log10DecimalBase = 5;
int digits[2*nbDigits+1];
int main() { assert(std::numeric_limits<int>::max()/nbDigits >= decimalBase); digits[1] = 2; for (int i = 2; i != 2*nbDigits+1; ++i) digits[i] = 1;
for (int i = 0; i < nbDigits; ++i) { int carry = 0; for (int i = 2*nbDigits; i != 0; --i) { carry += digits[i]*decimalBase; digits[i] = carry % i; carry /= i; } std::cout << std::setw(log10DecimalBase) << std::setfill('0') << carry; } }
il doit avoir moyen d'ameliorer la borne 2*nbDigits+1 du tableau mais j'ai pas envie de faire ca maintenant.
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
pi est une constante facile a exprimer dans une base variable et ce
programme effectue le changement de base. Je crois que j'ai donne
assez de renseignement pour montrer que je comprends le programme; je
merite donc le chocolat.
mmmh... non, je crois juste que tu as lu le même article que moi un
jour, mais je t'envoie le chocolat si tu peux expliquer ce qu'est
une base variable
livre, shillings, pence
Les chiffres ne sont pas a multipler avec des puissances successives
d'un meme nombre.
et pourquoi pi est "simple" dans cette base. Ou si tu produis un
programme semblable pour e...
Ca attendra que je rentre a la maison, si les enfants me laisse jouer
avec l'ordi.
Le plus simple des deux, c'est le programme pour
e = 2 + 1/2(1 + 1/3 (1 + ...
tellment simple que ca n'a pas besoin d'attendre que je rentre a la
maison, juste que j'ai a attendre que cet ordinateur finisse son
travail. Redemonter la formule pour pi est un peu plus complexe (bien
qu'elle soit connue depuis pas mal de temps). Et je ne suis pas sur
qu'une demonstration soit une explication.
int const nbDigits = 1000;
int const decimalBase = 100000;
int const log10DecimalBase = 5;
int digits[2*nbDigits+1];
int main() {
assert(std::numeric_limits<int>::max()/nbDigits >= decimalBase);
digits[1] = 2;
for (int i = 2; i != 2*nbDigits+1; ++i)
digits[i] = 1;
for (int i = 0; i < nbDigits; ++i) {
int carry = 0;
for (int i = 2*nbDigits; i != 0; --i) {
carry += digits[i]*decimalBase;
digits[i] = carry % i;
carry /= i;
}
std::cout << std::setw(log10DecimalBase) << std::setfill('0') << carry;
}
}
il doit avoir moyen d'ameliorer la borne 2*nbDigits+1 du tableau mais
j'ai pas envie de faire ca maintenant.
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
pi est une constante facile a exprimer dans une base variable et ce programme effectue le changement de base. Je crois que j'ai donne assez de renseignement pour montrer que je comprends le programme; je merite donc le chocolat.
mmmh... non, je crois juste que tu as lu le même article que moi un jour, mais je t'envoie le chocolat si tu peux expliquer ce qu'est une base variable
livre, shillings, pence
Les chiffres ne sont pas a multipler avec des puissances successives d'un meme nombre.
et pourquoi pi est "simple" dans cette base. Ou si tu produis un programme semblable pour e...
Ca attendra que je rentre a la maison, si les enfants me laisse jouer avec l'ordi.
Le plus simple des deux, c'est le programme pour
e = 2 + 1/2(1 + 1/3 (1 + ...
tellment simple que ca n'a pas besoin d'attendre que je rentre a la maison, juste que j'ai a attendre que cet ordinateur finisse son travail. Redemonter la formule pour pi est un peu plus complexe (bien qu'elle soit connue depuis pas mal de temps). Et je ne suis pas sur qu'une demonstration soit une explication.
int const nbDigits = 1000; int const decimalBase = 100000; int const log10DecimalBase = 5;
int digits[2*nbDigits+1];
int main() { assert(std::numeric_limits<int>::max()/nbDigits >= decimalBase); digits[1] = 2; for (int i = 2; i != 2*nbDigits+1; ++i) digits[i] = 1;
for (int i = 0; i < nbDigits; ++i) { int carry = 0; for (int i = 2*nbDigits; i != 0; --i) { carry += digits[i]*decimalBase; digits[i] = carry % i; carry /= i; } std::cout << std::setw(log10DecimalBase) << std::setfill('0') << carry; } }
il doit avoir moyen d'ameliorer la borne 2*nbDigits+1 du tableau mais j'ai pas envie de faire ca maintenant.
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
Christian PANEL
la valeur de PI est également disponible en direct dans le coprocesseur, une instruction spéciale la charge... j'aurai droit aussi au chocolat ??? ;-)
"Jean-Marc Bourguet" a écrit dans le message de news:
"Philippe Guglielmetti" writes:
maintenant, pour les petits malins qui aiment les décimales de pi, lancez cet horrible petit programme C pour voir:
celui qui explique comment ça marche gagne une plaque de chocolat suisse.
pi est une constante facile a exprimer dans une base variable et ce programme effectue le changement de base. Je crois que j'ai donne assez de renseignement pour montrer que je comprends le programme; je merite donc le chocolat. Mon adresse postable est facile a trouver pour qui connait un peu internet. Si tu preferes, tu peux envoyer du belge (ou du belge devenu suisse :-)
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
la valeur de PI est également disponible en direct dans le coprocesseur, une
instruction spéciale la charge...
j'aurai droit aussi au chocolat ??? ;-)
"Jean-Marc Bourguet" <jm@bourguet.org> a écrit dans le message de news:
pxbwuaqeoyl.fsf@news.bourguet.org...
celui qui explique comment ça marche gagne une plaque de chocolat
suisse.
pi est une constante facile a exprimer dans une base variable et ce
programme effectue le changement de base. Je crois que j'ai donne
assez de renseignement pour montrer que je comprends le programme; je
merite donc le chocolat. Mon adresse postable est facile a trouver
pour qui connait un peu internet. Si tu preferes, tu peux envoyer du
belge (ou du belge devenu suisse :-)
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
celui qui explique comment ça marche gagne une plaque de chocolat suisse.
pi est une constante facile a exprimer dans une base variable et ce programme effectue le changement de base. Je crois que j'ai donne assez de renseignement pour montrer que je comprends le programme; je merite donc le chocolat. Mon adresse postable est facile a trouver pour qui connait un peu internet. Si tu preferes, tu peux envoyer du belge (ou du belge devenu suisse :-)
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
Pierre Maurette
"Nico" a écrit
comment trouver une valeur suffisamment proche de pi ?? merci Bonjour,
Une valeur est "suffisamment proche de PI" si elle est égale à PI dans le type que vous utilisez pour les calculs. Les machines ayant des ambitions en calcul numérique disposent souvent d'une unité de calcul spécialisée (FPU ou coprocesseur arithmétique en archi IA32 Intel/AMD). La FPU dispose de constantes (PI, 0.0, 1.0, et quelques log). Elle ne doit pas être la seule dans ce cas. La meilleure valeur de PI pour nous est cette constante, dispo en assembleur par FLDPI. Je n'ai pas réussi (compilo Borland récent) à forcer le compilateur à utiliser cette constante. Mais les opérations trigo simples (4 * atgan(1) par exemple) se résolvent dans exactement la même valeur. C'est donc une bonne solution. La constante M_PI : #define M_PI 3.14159265358979323846 est nettement moins bonne. Définir PI en assembleur n'est pas portable, par contre à partir de l'arctangente vous avez les meilleures chances de tomber juste quelle que soit la plateforme. Bout d'essai :
comment trouver une valeur suffisamment proche de pi ??
merci
Bonjour,
Une valeur est "suffisamment proche de PI" si elle est égale à PI dans le
type que vous utilisez pour les calculs.
Les machines ayant des ambitions en calcul numérique disposent souvent d'une
unité de calcul spécialisée (FPU ou coprocesseur arithmétique en archi IA32
Intel/AMD).
La FPU dispose de constantes (PI, 0.0, 1.0, et quelques log). Elle ne doit
pas être la seule dans ce cas. La meilleure valeur de PI pour nous est cette
constante, dispo en assembleur par FLDPI.
Je n'ai pas réussi (compilo Borland récent) à forcer le compilateur à
utiliser cette constante. Mais les opérations trigo simples (4 * atgan(1)
par exemple) se résolvent dans exactement la même valeur. C'est donc une
bonne solution. La constante M_PI :
#define M_PI 3.14159265358979323846
est nettement moins bonne.
Définir PI en assembleur n'est pas portable, par contre à partir de
l'arctangente vous avez les meilleures chances de tomber juste quelle que
soit la plateforme.
Bout d'essai :
comment trouver une valeur suffisamment proche de pi ?? merci Bonjour,
Une valeur est "suffisamment proche de PI" si elle est égale à PI dans le type que vous utilisez pour les calculs. Les machines ayant des ambitions en calcul numérique disposent souvent d'une unité de calcul spécialisée (FPU ou coprocesseur arithmétique en archi IA32 Intel/AMD). La FPU dispose de constantes (PI, 0.0, 1.0, et quelques log). Elle ne doit pas être la seule dans ce cas. La meilleure valeur de PI pour nous est cette constante, dispo en assembleur par FLDPI. Je n'ai pas réussi (compilo Borland récent) à forcer le compilateur à utiliser cette constante. Mais les opérations trigo simples (4 * atgan(1) par exemple) se résolvent dans exactement la même valeur. C'est donc une bonne solution. La constante M_PI : #define M_PI 3.14159265358979323846 est nettement moins bonne. Définir PI en assembleur n'est pas portable, par contre à partir de l'arctangente vous avez les meilleures chances de tomber juste quelle que soit la plateforme. Bout d'essai :
ya pas dans le mien (VC6), et de toutes manières les #define pour des constantes mathématiques c'est de horreurs qu'aucun codeur digne de ce nom n'oserait utiliser, encore moins proposer pour un standard...
Ah, désolé, je pensais que M_PI était standard... Voir : http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc0011.html#q_8
comme l'a dit Benoît.
#undef M_PI #define M_PI 4 // MORT AUX MACROS!
Je suis d'accord avec toi. Mais comme je pensais que c'était le standard... Et dans ce cas-là seulement (c'est peut-être un des seuls) ça ne me dérange pas que ce soit un define. Après tout, c'est pas plus mal que le compilo sache que c'est une litérale constante...
Enfin, je t'accorde qu'un const double passerait aussi, voire mieux, mais il y a des précautions à prendre avec les extern, etc... A part le faire en enum, pas de solution possible (je n'en vois pas en tout cas, est-ce que static résoudrait le problème ?). Donc, c'est pas plus mal un #define.
Tiens, ça me fait poser une question ça (que je trouverai peut-être bête en revenant de manger :p) : comment définir une constante dans un en-tête standard, à part les enum ? En effet, si on met "const double", il faudra faire gaffe à l'ODR... et définir la variable dans un .cpp. Enfin, vous avez compris quoi... -- <=- Michaël "Cortex" Monerau -=>
Philippe Guglielmetti wrote:
"Michaël Monerau" a écrit
cherche un "#define M_PI xxx" dans math.h.
ya pas dans le mien (VC6), et de toutes manières les #define pour des
constantes mathématiques c'est de horreurs qu'aucun codeur digne de
ce nom n'oserait utiliser, encore moins proposer pour un standard...
Ah, désolé, je pensais que M_PI était standard... Voir :
http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc0011.html#q_8
comme l'a dit Benoît.
#undef M_PI
#define M_PI 4 // MORT AUX MACROS!
Je suis d'accord avec toi. Mais comme je pensais que c'était le standard...
Et dans ce cas-là seulement (c'est peut-être un des seuls) ça ne me dérange
pas que ce soit un define. Après tout, c'est pas plus mal que le compilo
sache que c'est une litérale constante...
Enfin, je t'accorde qu'un const double passerait aussi, voire mieux, mais il
y a des précautions à prendre avec les extern, etc... A part le faire en
enum, pas de solution possible (je n'en vois pas en tout cas, est-ce que
static résoudrait le problème ?). Donc, c'est pas plus mal un #define.
Tiens, ça me fait poser une question ça (que je trouverai peut-être bête en
revenant de manger :p) : comment définir une constante dans un en-tête
standard, à part les enum ? En effet, si on met "const double", il faudra
faire gaffe à l'ODR... et définir la variable dans un .cpp. Enfin, vous avez
compris quoi...
--
<=- Michaël "Cortex" Monerau -=>
ya pas dans le mien (VC6), et de toutes manières les #define pour des constantes mathématiques c'est de horreurs qu'aucun codeur digne de ce nom n'oserait utiliser, encore moins proposer pour un standard...
Ah, désolé, je pensais que M_PI était standard... Voir : http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc0011.html#q_8
comme l'a dit Benoît.
#undef M_PI #define M_PI 4 // MORT AUX MACROS!
Je suis d'accord avec toi. Mais comme je pensais que c'était le standard... Et dans ce cas-là seulement (c'est peut-être un des seuls) ça ne me dérange pas que ce soit un define. Après tout, c'est pas plus mal que le compilo sache que c'est une litérale constante...
Enfin, je t'accorde qu'un const double passerait aussi, voire mieux, mais il y a des précautions à prendre avec les extern, etc... A part le faire en enum, pas de solution possible (je n'en vois pas en tout cas, est-ce que static résoudrait le problème ?). Donc, c'est pas plus mal un #define.
Tiens, ça me fait poser une question ça (que je trouverai peut-être bête en revenant de manger :p) : comment définir une constante dans un en-tête standard, à part les enum ? En effet, si on met "const double", il faudra faire gaffe à l'ODR... et définir la variable dans un .cpp. Enfin, vous avez compris quoi... -- <=- Michaël "Cortex" Monerau -=>
Loïc Joly
Michaël Monerau wrote:
Tiens, ça me fait poser une question ça (que je trouverai peut-être bête en revenant de manger :p) : comment définir une constante dans un en-tête standard, à part les enum ? En effet, si on met "const double", il faudra faire gaffe à l'ODR... et définir la variable dans un .cpp. Enfin, vous avez compris quoi...
Bin, pas vraiment. Qu'est-ce qui te gêne dans la solution :
// <cmath> extern double const PI;
// Ailleur, à discrétion du compilo : double const PI = 3.14;
-- Loïc
Michaël Monerau wrote:
Tiens, ça me fait poser une question ça (que je trouverai peut-être bête en
revenant de manger :p) : comment définir une constante dans un en-tête
standard, à part les enum ? En effet, si on met "const double", il faudra
faire gaffe à l'ODR... et définir la variable dans un .cpp. Enfin, vous avez
compris quoi...
Bin, pas vraiment. Qu'est-ce qui te gêne dans la solution :
// <cmath>
extern double const PI;
// Ailleur, à discrétion du compilo :
double const PI = 3.14;
Tiens, ça me fait poser une question ça (que je trouverai peut-être bête en revenant de manger :p) : comment définir une constante dans un en-tête standard, à part les enum ? En effet, si on met "const double", il faudra faire gaffe à l'ODR... et définir la variable dans un .cpp. Enfin, vous avez compris quoi...
Bin, pas vraiment. Qu'est-ce qui te gêne dans la solution :
// <cmath> extern double const PI;
// Ailleur, à discrétion du compilo : double const PI = 3.14;
-- Loïc
Fabien LE LEZ
On Mon, 27 Oct 2003 16:03:25 +0100, Benoit Dejean wrote:
ahah t'es pris la main dans la sac :oD http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc0011.html#q_8
Arf, bien vu. Merci du tuyau.
-- ;-)
On Mon, 27 Oct 2003 16:03:25 +0100, Benoit Dejean <bnet@ifrance.com>
wrote:
ahah t'es pris la main dans la sac :oD
http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc0011.html#q_8