| View previous topic :: View next topic |
| Author |
Message |
ben_cal Guest
|
Posted: Tue Feb 17, 2004 3:43 pm Post subject: #define conditionnel |
|
|
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
|
Posted: Tue Feb 17, 2004 4:20 pm Post subject: Re: #define conditionnel |
|
|
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
|
Posted: Tue Feb 17, 2004 4:47 pm Post subject: Re: #define conditionnel |
|
|
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
|
Posted: Tue Feb 17, 2004 5:01 pm Post subject: Re: #define conditionnel |
|
|
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
|
Posted: Tue Feb 17, 2004 7:22 pm Post subject: Re: #define conditionnel |
|
|
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
|
Posted: Tue Feb 17, 2004 7:32 pm Post subject: Re: #define conditionnel |
|
|
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
|
Posted: Tue Feb 17, 2004 7:45 pm Post subject: Re: #define conditionnel |
|
|
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
|
Posted: Wed Feb 18, 2004 8:38 am Post subject: Re: #define conditionnel |
|
|
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
|
Posted: Thu Feb 19, 2004 6:40 pm Post subject: Re: #define conditionnel |
|
|
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
|
Posted: Thu Feb 19, 2004 9:16 pm Post subject: Re: #define conditionnel |
|
|
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
|
Posted: Fri Feb 20, 2004 8:46 am Post subject: Re: #define conditionnel |
|
|
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
|
Posted: Fri Feb 20, 2004 8:47 am Post subject: Re: #define conditionnel |
|
|
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
|
Posted: Fri Feb 20, 2004 8:51 am Post subject: Re: #define conditionnel |
|
|
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
|
Posted: Fri Feb 20, 2004 9:12 am Post subject: Re: #define conditionnel |
|
|
"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
|
Posted: Fri Feb 20, 2004 8:53 pm Post subject: Re: #define conditionnel |
|
|
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 '#'
|
Pourquoi ?
--
Loïc
|
|
| Back to top |
|
 |
|