 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
tournevissette@yahoo.fr Guest
|
Posted: Sat May 28, 2005 10:39 am Post subject: Définition de 'inf' |
|
|
Bonjour,
j'aimerais assigner '+inf' à une variable, et je me demandais
comment faire ca de manière élégante en C/C++, qui ne générerait
aucun warning, ni a la compilation, ni à l'éxecution.
J'ai essayé :
const double inf = std::pow(1024.0,1024.0);
mais c'est pas très beau. De plus, ca génère un warning à
l'éxecution,
avec bcc32.
Est-ce que quelqu'un a une idée ?
Merci d'avance.
|
|
| Back to top |
|
 |
Anthony Fleury Guest
|
Posted: Sat May 28, 2005 11:33 am Post subject: Re: Définition de 'inf' |
|
|
[email]tournevissette (AT) yahoo (DOT) fr[/email] a écrit :
Bonjour,
| Quote: | j'aimerais assigner '+inf' à une variable, et je me demandais
comment faire ca de manière élégante en C/C++, qui ne générerait
aucun warning, ni a la compilation, ni à l'éxecution.
|
En C ou en C++ ? car la réponse n'est pas la même... Enfin du moins ma
réponse C++ ne fonctionnera pas en C. Mais comme on est sur un groupe
C++, je considère C++ seulement.
| Quote: | J'ai essayé :
const double inf = std::pow(1024.0,1024.0);
|
#include <limits>
const double inf = std::numeric_limits<double>::infinity();
--
Anthony Fleury
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sat May 28, 2005 11:42 am Post subject: Re: Définition de 'inf' |
|
|
On 28 May 2005 03:39:05 -0700, [email]tournevissette (AT) yahoo (DOT) fr[/email]:
| Quote: | j'aimerais assigner '+inf' à une variable, et je me demandais
comment faire ca de manière élégante en C/C++, qui ne générerait
aucun warning, ni a la compilation, ni à l'éxecution.
|
En C/C++, je ne sais pas, je ne connais pas ce langage.
En C++, tu peux peut-être t'en sortir avec
double un_nombre_infini= std::numeric_limits<double>::infinity()
float un_autre_nombre_infini= std::numeric_limits<float>::infinity()
J'avoue que je connais mal les flottants, mais si ça ne marche pas, je
ne vois pas bien ce qui pourrait fonctionner.
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sat May 28, 2005 11:48 am Post subject: Re: Définition de 'inf' |
|
|
On Sat, 28 May 2005 13:33:12 +0200, Anthony Fleury
<fleury_anthony (AT) hotmail (DOT) com_>:
| Quote: | #include <limits
const double inf = std::numeric_limits
|
À noter que sur mon Borland C++ 5.02 (que tu es trop jeune pour avoir
connu), std::numeric_limits<double>::has_infinity == false
|
|
| Back to top |
|
 |
Anthony Fleury Guest
|
Posted: Sat May 28, 2005 12:21 pm Post subject: Re: Définition de 'inf' |
|
|
Fabien LE LEZ a écrit :
| Quote: | On Sat, 28 May 2005 13:33:12 +0200, Anthony Fleury
[email]fleury_anthony (AT) hotmail (DOT) com[/email]_>:
#include <limits
const double inf = std::numeric_limits
À noter que sur mon Borland C++ 5.02 (que tu es trop jeune pour avoir
connu),
|
Ah merci, moi qui déprimais à l'approche de mon prochain anniversaire me
disant que mon âge approchait trop de
std::numeric_limits<jeunesse>::max(); ca fait plaisir à lire :-)
| Quote: | std::numeric_limits<double>::has_infinity == false
|
Hum, erreur de souvenir de ma part, c'est en effet
std::numeric_limits<float>::has_infinity qui est à true d'après la
norme. Pour un double ca peut donc être à false. Et si j'ai bien tout
compris, avec has_infinity == false, le comportement est indéfini.
[puisqu'il est seulement dit que la valeur n'a de sens que si
has_infinity != false]
--
Anthony Fleury
|
|
| Back to top |
|
 |
Anthony Fleury Guest
|
Posted: Sat May 28, 2005 12:41 pm Post subject: Re: Définition de 'inf' |
|
|
Fabien LE LEZ a écrit :
| Quote: | On Sat, 28 May 2005 13:33:12 +0200, Anthony Fleury
[email]fleury_anthony (AT) hotmail (DOT) com[/email]_>:
#include <limits
const double inf = std::numeric_limits
À noter que sur mon Borland C++ 5.02 (que tu es trop jeune pour avoir
connu),
|
Ah merci, moi qui déprimais à l'approche de mon prochain anniversaire me
disant que mon âge approchait trop de
std::numeric_limits<jeunesse>::max(); ca fait plaisir à lire :-)
| Quote: | std::numeric_limits<double>::has_infinity == false
|
Hum, erreur de souvenir de ma part, c'est en effet
std::numeric_limits<float>::has_infinity qui est à true d'après la
norme. Pour un double ca peut donc être à false. Et si j'ai bien tout
compris, avec has_infinity == false, le comportement est indéfini.
[puisqu'il est seulement dit que la valeur n'a de sens que si
has_infinity != false]. Pour ma part je me serai attendu à ce que cela
renvoie std::numeric_limits<>::max();
--
Anthony Fleury
|
|
| Back to top |
|
 |
Tournevissette Guest
|
Posted: Sat May 28, 2005 6:09 pm Post subject: Re: Définition de 'inf' |
|
|
Merci, effectivement en fait je cherche plutot une syntaxe de type C.
Mais bon, je sais comment en faire en C++ du coup, c'est pas plus mal
:)
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sat May 28, 2005 8:55 pm Post subject: Re: Définition de 'inf' |
|
|
On 28 May 2005 11:09:27 -0700, "Tournevissette"
<tournevissette (AT) yahoo (DOT) fr>:
| Quote: | Merci, effectivement en fait je cherche plutot une syntaxe de type C.
|
Dans ce cas, il faut demander sur fr.comp.lang.c.
C et C++ sont deux langages différents.
|
|
| Back to top |
|
 |
Tournevissette Guest
|
Posted: Sun May 29, 2005 10:40 am Post subject: Re: Définition de 'inf' |
|
|
C'est bien ce que j'ai fait, mais ca m'interesse aussi
d'avoir les deux approches.
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sun May 29, 2005 11:26 am Post subject: Re: Définition de 'inf' |
|
|
On 29 May 2005 03:40:05 -0700, "Tournevissette"
<tournevissette (AT) yahoo (DOT) fr>:
| Quote: | C'est bien ce que j'ai fait, mais ca m'interesse aussi
d'avoir les deux approches.
|
Mais dans ce cas, il ne faut pas demander une approche de type C sur
fr.comp.lang.c++, ni une approche de type C++ sur
fr.comp.lang.basic...
|
|
| Back to top |
|
 |
Tournevissette Guest
|
Posted: Sun May 29, 2005 4:17 pm Post subject: Re: Définition de 'inf' |
|
|
| Quote: | Mais dans ce cas, il ne faut pas demander une approche de type C sur
fr.comp.lang.c++, ni une approche de type C++ sur
fr.comp.lang.basic...
|
J'aime la réponse constructive...
Si on regarde un peu plus loin, pourquoi la représentation d'un nombre
flottant infini devrait être dépendante du langage C ou C++, alors
que les deux langages proposent à-priori les mêmes opérations de
base pour le calcul sur les flottants ?
A mon sens, représenter la notion d'infini en C ou C++ ne devrait pas
être dépendante de quelconques includes spécifiques C ou C++. A
priori, je peux obtenir un nombre inifi avec le même code valide en
C/C++ :
float x;
for (x=2; x<2*x; x*=2);
std::fprintf(stderr,"x = %gn",x);
(Les "puristes" du C++ peuvent remplacer fprintf par le cout qui va
bien ).
Cet exemple me renvoit bien +Inf avec gcc ET g++.
Donc je me serais attendu à avoir une réponse indépendante de la
différence entre C et C++, même si on peut faire ca de manière
dépendante bien entendu, comme vous l'avez fait remarqué ici. Et bien
entendu, le groupe fr.comp.lang.c_c++ n'existe pas....
A méditer, non ?
|
|
| Back to top |
|
 |
Anthony Fleury Guest
|
Posted: Sun May 29, 2005 5:04 pm Post subject: Re: Définition de 'inf' |
|
|
Tournevissette a écrit :
| Quote: | Donc je me serais attendu à avoir une réponse indépendante de la
différence entre C et C++, même si on peut faire ca de manière
dépendante bien entendu, comme vous l'avez fait remarqué ici. Et bien
entendu, le groupe fr.comp.lang.c_c++ n'existe pas....
A méditer, non ?
|
Le seul problème c'est que C (C89) n'offre pas d'infini. C99 a ajouté le
INFINITY comme les réponses que tu as eu sur fcl.c. La partie
compatibilité C du C++ est basé sur C89. Donc <math.h> en C++ n'offre
pas cette macro.
C++ quant à lui offre les numeric_limits. Etant une classe, c'est
spécifique à C++ et beaucoup plus puissant que ce qui était offert par
C. La réponse est donc forcément dépendante du langage. En effet, même
si C et C++ ont un nom qui se ressemble et une base commune, ce sont
deux langages totalement différent, et on ne travaille pas pareil en C
et en C++. Par exemple, si jamais INFINITY existait dans les deux, je ne
l'utiliserais pas en C++. Autant ne pas se priver de la puissance de C++
et de ce qu'il offre.
De même, si j'ai besoin d'un tableau, je ne le ferai probablement pas à
la C (int t[42]), mais avec un std::vector<>.
En fait, ma question pour toi serait :
Vu que tu utilises du std::pow... pourquoi ne pas te contenter de la
réponse C++ ?
--
Anthony Fleury
|
|
| Back to top |
|
 |
Tournevissette Guest
|
Posted: Sun May 29, 2005 5:41 pm Post subject: Re: Définition de 'inf' |
|
|
Merci pour la réponse.
Je suis très content de la réponse C++ que vous m'avez fournie, je ne
dis pas le contraire. Cela dit, cela n'empeche pas d'être curieux et
de me poser des questions sur les pourquoi et comment du langage, en
passant.
Merci en tout cas.
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sun May 29, 2005 6:04 pm Post subject: Re: Définition de 'inf' |
|
|
On 29 May 2005 09:17:44 -0700, "Tournevissette"
<tournevissette (AT) yahoo (DOT) fr>:
| Quote: | A
priori, je peux obtenir un nombre inifi avec le même code valide en
C/C++ :
|
Valide en C ainsi qu'en C++, tu veux dire ?
| Quote: | float x;
for (x=2; x<2*x; x*=2);
|
Justement, j'ai des doutes sur la validité de ce code.
J'ai tenté de le compiler et de l'exécuter. Le résultat ne s'est pas
fait attendre : le processeur a bogué, et j'ai eu un joli BSOD, puis
redémarrage de la machine.
Je pense que mon processeur a un sérieux problème ; néanmoins, il y a
des chances pour qu'un PC avec un processeur en bon état affiche un
message d'erreur quelconque. Il est aussi possible que ce soit mon
compilo qui déconne.
|
|
| Back to top |
|
 |
Anthony Fleury Guest
|
Posted: Sun May 29, 2005 6:29 pm Post subject: Re: Définition de 'inf' |
|
|
Tournevissette a écrit :
| Quote: | Merci pour la réponse.
Je suis très content de la réponse C++ que vous m'avez fournie, je ne
dis pas le contraire. Cela dit, cela n'empeche pas d'être curieux et
de me poser des questions sur les pourquoi et comment du langage, en
passant.
|
Je ne suis pas du tout contre se poser des questions bien au contraire.
Vu que tu citais au départ C/C++, je pensais que tu voulais programmer
en C++ comme en C, en rajoutant seulement des classes ou des std::
J'ai donc pensé au départ que c'était pour éviter des trucs pratiques de
C++ :-)
--
Anthony Fleury
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|