OVH Cloud OVH Cloud

Surcharge et priorité

39 réponses
Avatar
Etienne Rousee
Bonsoir,

J'écris une bibliothèque de polynômes et j'ai
quelques problèmes avec l'opérateur exposant (^).
J'ai écrit toutes les surcharges nécessaires et
ceci par, exemple, compile:
Polynome P = (X^3) - 6 * (X^2) + 9 * X - 4;
Par contre, ceci ne compile pas:
Polynome P = X^3 - 6 * X^2 + 9 * X - 4;
Par ailleurs X^2 - 1 compile et donne X.
Je n'ai donc pas la bonne priorité.

Y a-t-il moyen d'arranger ça ?

--

Etienne

10 réponses

1 2 3 4
Avatar
Serge Paccalin
Le lundi 19 décembre 2005 à 12:45:24, Etienne Rousee a écrit dans
fr.comp.lang.c++ :

Bon, je crois que je vais garder ^ et mettre des
parenthèses un peu partout.


... et si jamais tu oublies une parenthèse, tu auras un bug bien
pénible.

Ben oui, mais tu vois une autre solution ?

En plus, j'ai l'intention de le passer en template après.


À part utiliser un autre opérateur (et il n'y a plus que « % » qui
répond au cahier des charges)...

--
___________ 19/12/2005 16:12:30
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763



Avatar
Fabien LE LEZ
On Mon, 19 Dec 2005 16:14:20 +0100, Serge Paccalin
:

À part utiliser un autre opérateur (et il n'y a plus que « % » qui
répond au cahier des charges)...


Et là encore, % représente le modulo sur les polynômes, donc on est
coincé.
Je n'ai malheureusement rien d'autre à proposer qu'une fonction
"classique" (i.e. autre qu'un opérateur).
Le code utilisateur sera plus lourd, mais moins trompeur.

Avatar
Serge Paccalin
Le lundi 19 décembre 2005 à 16:24:08, Fabien LE LEZ a écrit dans
fr.comp.lang.c++ :

On Mon, 19 Dec 2005 16:14:20 +0100, Serge Paccalin
:

À part utiliser un autre opérateur (et il n'y a plus que « % » qui
répond au cahier des charges)...


Et là encore, % représente le modulo sur les polynômes, donc on est
coincé.


Pire, on a encore un problème de priorité, je ne l'ai qu'après ;
6 * X % 2 est interprété comme (6 * X) % 2...

Je n'ai malheureusement rien d'autre à proposer qu'une fonction
"classique" (i.e. autre qu'un opérateur).
Le code utilisateur sera plus lourd, mais moins trompeur.


Et Polynome::operator(int) ?

Polynome P = 6 * X(2) + 2 * X + 1;

S'il y a déjà un Polynome::operator(double) pour évaluer le polynôme en
un point, il faudra faire attention : P(2) élèverait P au carré, alors
que P(2.0) l'évaluerait en x = 2.

--
___________ 19/12/2005 16:41:01
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763


Avatar
Fabien LE LEZ
On Mon, 19 Dec 2005 16:49:16 +0100, Serge Paccalin :

S'il y a déjà un Polynome::operator(double) pour évaluer le polynôme en
un point, il faudra faire attention : P(2) élèverait P au carré, alors
que P(2.0) l'évaluerait en x = 2.


C'est au moins aussi casse-gueule que operator^ ...

Avatar
loic.actarus.joly
Quelques idées, dont aucune n'est trancendante :
- P = 2*X*X*X +3*X*X + 4*X +1
- P = 2*X3 + 3*X2 + 4*X + 1
- P = [2,3,4,1]
Avatar
Jean-Marc Bourguet
"" writes:

- P = [2,3,4,1]


Comment tu arrives a faire fonctionner celle-ci?

--
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

Avatar
Fabien LE LEZ
On 20 Dec 2005 08:31:46 +0100, Jean-Marc Bourguet :

- P = [2,3,4,1]


Comment tu arrives a faire fonctionner celle-ci?


Je crois qu'il a confondu "polynôme exposant N" et "X exposant N pour
construction d'un polynôme"...


Avatar
meow
<Question naive=on>
Est-il envisageable de considérer un mécanisme de pré-processing
pour lire ton code et mettre les parantyhèses aux bons endroits avant
de passer la main au compilo ?
<Question naive=off>
Avatar
loic.actarus.joly

"" wri tes:

- P = [2,3,4,1]


Comment tu arrives a faire fonctionner celle-ci?


C'est très simple : ça compile sans problème avec gcc7.2 ou visual
C++ 2015. Bien évidemment, si tu ne peut pas voyager dans le temps,
c'est un peu plus difficile...

En fait, je pensais à une syntaxe du style de Blitz, ou boost::assign
:

P = 1,2,3,4,5;

--
Loïc


Avatar
Jean-Marc Bourguet
"" writes:


"" writes:

- P = [2,3,4,1]


Comment tu arrives a faire fonctionner celle-ci?


C'est très simple : ça compile sans problème avec gcc7.2 ou visual
C++ 2015. Bien évidemment, si tu ne peut pas voyager dans le temps,
c'est un peu plus difficile...


Je ne vois pas l'intérêt de cette notationa avec cette
version. Tu définis simplement U2191 comme l'opérateur
d'exponentiation et roule la machine (d'ailleurs, je ne sais
pas encore si la proposition d'avoir cette définition
d'office est passée ou pas...)

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



1 2 3 4