C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

#define conditionnel
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
ben_cal
Guest





PostPosted: Tue Feb 17, 2004 3:43 pm    Post subject: #define conditionnel Reply with quote



Bonjour,

je travaille en ce moment sur une lib qui peut avoir 2 versions (une
float et une double suivant que REAL est defini a float ou a double).
J'aimerais maintenant que tous les #define EPSILON et autres prennent en
compte la valeur de REAL. Soit un truc du genre:

#if REAL == float
#define EPSILON = 1e-4
#else
#define EPSILON = 1e-6

Si qq1 parmi vous a une solution propre, merci d'avance.

Benoit

Back to top
Florent C.
Guest





PostPosted: Tue Feb 17, 2004 4:20 pm    Post subject: Re: #define conditionnel Reply with quote



ben_cal wrote:

Quote:
Bonjour,

je travaille en ce moment sur une lib qui peut avoir 2 versions (une
float et une double suivant que REAL est defini a float ou a double).
J'aimerais maintenant que tous les #define EPSILON et autres prennent
en compte la valeur de REAL. Soit un truc du genre:

#if REAL == float
#define EPSILON = 1e-4
#else
#define EPSILON = 1e-6

Si qq1 parmi vous a une solution propre, merci d'avance.

Benoit

#define REAL_DOUBLE // commenter ou decommenter suivant ce que l'on veut

#ifdef REAL_DOUBLE
#define REAL double
#define EPSILON 1e-6 //pas sur pour la syntaxe
#else
#define REAL float
#define EPSILON 1e-4
#endif

pas sur pour la syntaxe des 1e-6 et 1e-4 (je n'ai jamais utilisé cette
syntaxe en tout cas) mais en tout cas le principe (celui des #ifdef /
#endif) y est

flure


Back to top
Marc Boyer
Guest





PostPosted: Tue Feb 17, 2004 4:47 pm    Post subject: Re: #define conditionnel Reply with quote



In article <4032368a$1 (AT) epflnews (DOT) epfl.ch>, ben_cal wrote:
Quote:
Bonjour,

je travaille en ce moment sur une lib qui peut avoir 2 versions (une
float et une double suivant que REAL est defini a float ou a double).
J'aimerais maintenant que tous les #define EPSILON et autres prennent en
compte la valeur de REAL. Soit un truc du genre:

#if REAL == float
#define EPSILON = 1e-4
#else
#define EPSILON = 1e-6

Si qq1 parmi vous a une solution propre, merci d'avance.

La solution propre en C++ ce serait plutôt template
+ typedef.
Juste pour rire, compile un bout de ta librairie avec
des floats, modifie deux-trois trucs, passe en double
et fait un make ou équivalent.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(

Back to top
Falk Tannhäuser
Guest





PostPosted: Tue Feb 17, 2004 5:01 pm    Post subject: Re: #define conditionnel Reply with quote

ben_cal wrote:
Quote:
je travaille en ce moment sur une lib qui peut avoir 2 versions (une
float et une double suivant que REAL est defini a float ou a double).
J'aimerais maintenant que tous les #define EPSILON et autres prennent en
compte la valeur de REAL. Soit un truc du genre:

#if REAL == float
#define EPSILON = 1e-4
#else
#define EPSILON = 1e-6
#include <limits


'std::numeric_limits correspondante au type REAL (soit 'float', 'double' ou 'long double')
sur ta plate-forme.

Falk

Back to top
Loïc Joly
Guest





PostPosted: Tue Feb 17, 2004 7:22 pm    Post subject: Re: #define conditionnel Reply with quote

Falk Tannhäuser wrote:
Quote:
ben_cal wrote:

je travaille en ce moment sur une lib qui peut avoir 2 versions (une
float et une double suivant que REAL est defini a float ou a double).
J'aimerais maintenant que tous les #define EPSILON et autres prennent en
compte la valeur de REAL. Soit un truc du genre:

#if REAL == float
#define EPSILON = 1e-4
#else
#define EPSILON = 1e-6

#include <limits

'std::numeric_limits correspondante au type REAL (soit 'float', 'double' ou 'long double')
sur ta plate-forme.

Et de plus, ça marche aussi si on a fait :

typedef Real double;

au lieu de

#define REAL double

--
Loïc

Back to top
Nicolas Aunai
Guest





PostPosted: Tue Feb 17, 2004 7:32 pm    Post subject: Re: #define conditionnel Reply with quote

Loïc Joly a formulé la demande :

Quote:
Et de plus, ça marche aussi si on a fait :

typedef Real double;


euh...

typedef double Real;

plutôt..

A+

--
Nico,
http://astrosurf.com/nicoastro
messenger : [email]nicolas_aunai (AT) hotmail (DOT) com[/email]


Back to top
Loïc Joly
Guest





PostPosted: Tue Feb 17, 2004 7:45 pm    Post subject: Re: #define conditionnel Reply with quote

Nicolas Aunai wrote:

Quote:
Loïc Joly a formulé la demande :

Et de plus, ça marche aussi si on a fait :

typedef Real double;



euh...

typedef double Real;

plutôt..

Oups...

--
Loïc


Back to top
ben_cal
Guest





PostPosted: Wed Feb 18, 2004 8:38 am    Post subject: Re: #define conditionnel Reply with quote

Loïc Joly wrote:

Quote:
Et de plus, ça marche aussi si on a fait :

typedef Real double;

au lieu de

#define REAL double

Le probleme c que REAL n'est pas defini dans le code mais dans les
options du projet VC++. De cette maniere, on peut recompiler les libs
sans avoir a toucher le code.
Si on fait des trucs du genre, REAL est defini "qqpart" et je ne suis
pas sense savoir ou en fait. A moi de me debrouiller correctement pour
changer le code sans "gener" les autres...

Merci pour vos reponses,
Benoit


Back to top
ben_cal
Guest





PostPosted: Thu Feb 19, 2004 6:40 pm    Post subject: Re: #define conditionnel Reply with quote

ben_cal wrote:

Quote:
Le probleme c que REAL n'est pas defini dans le code mais dans les
options du projet VC++. De cette maniere, on peut recompiler les libs
sans avoir a toucher le code.
Si on fait des trucs du genre, REAL est defini "qqpart" et je ne suis
pas sense savoir ou en fait. A moi de me debrouiller correctement pour
changer le code sans "gener" les autres...
Euh, il vous inspire tant que ca mon probleme? ;-(

Personne n'a jamais essaye de faire un truc pareil ou c juste parce que
ma question est toute pourrite??

Benoit


Back to top
Loïc Joly
Guest





PostPosted: Thu Feb 19, 2004 9:16 pm    Post subject: Re: #define conditionnel Reply with quote

ben_cal wrote:

Quote:
ben_cal wrote:

Le probleme c que REAL n'est pas defini dans le code mais dans les
options du projet VC++. De cette maniere, on peut recompiler les libs
sans avoir a toucher le code.
Si on fait des trucs du genre, REAL est defini "qqpart" et je ne suis
pas sense savoir ou en fait. A moi de me debrouiller correctement pour
changer le code sans "gener" les autres...

Euh, il vous inspire tant que ca mon probleme? ;-(
Personne n'a jamais essaye de faire un truc pareil ou c juste parce que
ma question est toute pourrite??

Euh, il me semblait que tu avais déjà eu de bonnes solutions, qu'est-ce
qui ne te conviens pas avec ?

--
Loïc

Back to top
benoit le callennec
Guest





PostPosted: Fri Feb 20, 2004 8:46 am    Post subject: Re: #define conditionnel Reply with quote

Loïc Joly wrote:


Quote:
Euh, il me semblait que tu avais déjà eu de bonnes solutions, qu'est-ce
qui ne te conviens pas avec ?

A moins que j'ai rate un truc, mais les solutions proposees suppposent
que ce soit moi qui definisse REAL. Malheureusement ce n'est pas le cas
car il est defini dans les options de compilation...
Donc, je me retrouve avec un REAL deja defini et utilise partout dans le
code.
Pour resumer, on doit pouvoir recompiler toutes les libs uniquement en
ne changeant que cette option de compilation...
Ya t'il un truc que j'aurais manque?

Benoit


Back to top
ben_cal
Guest





PostPosted: Fri Feb 20, 2004 8:47 am    Post subject: Re: #define conditionnel Reply with quote

Loïc Joly wrote:


Quote:
Euh, il me semblait que tu avais déjà eu de bonnes solutions,
qu'est-ce qui ne te conviens pas avec ?



A moins que j'ai rate un truc, mais les solutions proposees suppposent
que ce soit moi qui definisse REAL. Malheureusement ce n'est pas le cas
car il est defini dans les options de compilation...
Donc, je me retrouve avec un REAL deja defini et utilise partout dans le
code.
Pour resumer, on doit pouvoir recompiler toutes les libs uniquement en
ne changeant que cette option de compilation...
Ya t'il un truc que j'aurais manque?

Benoit


Back to top
Florent C.
Guest





PostPosted: Fri Feb 20, 2004 8:51 am    Post subject: Re: #define conditionnel Reply with quote

ben_cal wrote:

Quote:
Loïc Joly wrote:


Euh, il me semblait que tu avais déjà eu de bonnes solutions,
qu'est-ce qui ne te conviens pas avec ?


A moins que j'ai rate un truc, mais les solutions proposees suppposent
que ce soit moi qui definisse REAL. Malheureusement ce n'est pas le
cas car il est defini dans les options de compilation...
Donc, je me retrouve avec un REAL deja defini et utilise partout dans
le code.
Pour resumer, on doit pouvoir recompiler toutes les libs uniquement en
ne changeant que cette option de compilation...
Ya t'il un truc que j'aurais manque?

Benoit

#ifdef REAL

#define EPSILON 1e-6 //pas sur pour la syntaxe
#else
#define EPSILON 1e-4
#endif

Ca devrait aller ça non ?

flure


Back to top
Matthieu Moy
Guest





PostPosted: Fri Feb 20, 2004 9:12 am    Post subject: Re: #define conditionnel Reply with quote

"Florent C." <flure_NOT_ (AT) free (DOT) fr> writes:

Quote:
#ifdef REAL
#define EPSILON 1e-6 //pas sur pour la syntaxe
#else
#define EPSILON 1e-4
#endif

Ca devrait aller ça non ?

Sans les espaces avant les '#' ;-)

Le problème à l'origine, c'est que le préprocesseur C/C++ ne peut pas
faire de comparaison de chaines.

La solution avec templates me parait plus proche de la solution
cherchée.

template<class T>
class EPSILON {
static REAL value;
};

class EPSILON<float> {
static REAL value;
};

REAL EPSILON<float>::value = ...;

class EPSILON<long> {
static REAL value;
};

REAL EPSILON<long>::value = ...;

et utiliser ensuite EPSILON<REAL>::value.

(non testé, et sans doute améliorable !)

--
Matthieu

Back to top
Loïc Joly
Guest





PostPosted: Fri Feb 20, 2004 8:53 pm    Post subject: Re: #define conditionnel Reply with quote

Matthieu Moy wrote:

Quote:
"Florent C." <flure_NOT_ (AT) free (DOT) fr> writes:


#ifdef REAL
#define EPSILON 1e-6 //pas sur pour la syntaxe
#else
#define EPSILON 1e-4
#endif

Ca devrait aller ça non ?


Sans les espaces avant les '#' Wink

Pourquoi ?

--
Loïc

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.