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 

Pb de valeur limite

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Marc
Guest





PostPosted: Sat Nov 06, 2004 10:04 am    Post subject: Pb de valeur limite Reply with quote



Je m'explique : y-a-t-il un moyen que tout le monde connait sauf moi de
savoir si une opération sur des entiers (par exemple) va provoquer un
"dépassement" de valeur limite , ou doit-on le tester avant chaque
opération, comme ceci par exemple, pour une multiplication ?

int max_value=std::numeric_limits<int>().max();
int x=...,y=...; // valeurs dans les limites au départ
int produit;
if (y>(max_value/x)) throw ExceptionDepassement(); // division entiere
else produit=x*y; // pas de dépassement ici
Comme j'ai redéfini des classes pour les différents types fondamentaux,
est-il légitime d'envisager d'introduire ces tests de dépassement dans les
opérateurs redéfinis (reste ensuite le pb de la vitesse d'exécution...) ?
Marc


Back to top
Pierre Maurette
Guest





PostPosted: Sat Nov 06, 2004 11:15 am    Post subject: Re: Pb de valeur limite Reply with quote



"Marc" <metrica (AT) free (DOT) fr> a écrit:

Quote:
Je m'explique : y-a-t-il un moyen que tout le monde connait sauf moi de
savoir si une opération sur des entiers (par exemple) va provoquer un
"dépassement" de valeur limite , ou doit-on le tester avant chaque
opération, comme ceci par exemple, pour une multiplication ?

int max_value=std::numeric_limits<int>().max();
int x=...,y=...; // valeurs dans les limites au départ
int produit;
if (y>(max_value/x)) throw ExceptionDepassement(); // division entiere
else produit=x*y; // pas de dépassement ici
Comme j'ai redéfini des classes pour les différents types fondamentaux,
est-il légitime d'envisager d'introduire ces tests de dépassement dans les
opérateurs redéfinis (reste ensuite le pb de la vitesse d'exécution...) ?
Je ne pense pas qu'il existe une réponse positive à votre problème. Ou

alors dans des bibliothèques non standards ou dans les spécifics de
l'implémentation.

Je ne le crois pas d'abord parce que les quelques sources que je
connais sur des classes grands entiers utilisent l'assembleur. De
plus, il semble que ce bout de littérature C# fournisse une réponse:
http://www.thecodeproject.com/csharp/overflow_checking.asp

Si vous savez disposer d'un type entier faisant 2*siezof(int), vous
pourriez peut-être envisager une autre approche: multiplier dans ce
type et tester la partie haute du résultat. Ça ouvre d'autres
perspectives, que vous pouvez ou non exploiter (une addition dépasse
de 1 ou ne dépasse pas, ce qui n'est pas le cas de la multiplication).
Remarque: les processeurs Intel family (et pourquoi pas d'autres)
mènent la multiplication entière de cette façon. Il est donc permis
d'espérer qu'un compilateur pas trop tarte optimise intelligemment et
que ce soit aussi bon, voire meilleur, que le test préalable.
--
Pierre

Back to top
Marc Boyer
Guest





PostPosted: Mon Nov 08, 2004 9:22 am    Post subject: Re: Pb de valeur limite Reply with quote



Marc wrote:
Quote:
Je m'explique : y-a-t-il un moyen que tout le monde connait sauf moi de
savoir si une opération sur des entiers (par exemple) va provoquer un
"dépassement" de valeur limite , ou doit-on le tester avant chaque
opération, comme ceci par exemple, pour une multiplication ?

int max_value=std::numeric_limits<int>().max();
int x=...,y=...; // valeurs dans les limites au départ
int produit;
if (y>(max_value/x)) throw ExceptionDepassement(); // division entiere
else produit=x*y; // pas de dépassement ici

C'est la seule métode que je connaisse (à part de convaincre
le vendeur du compilateur de le faire lui même).

Quote:
Comme j'ai redéfini des classes pour les différents types fondamentaux,
est-il légitime d'envisager d'introduire ces tests de dépassement dans les
opérateurs redéfinis (reste ensuite le pb de la vitesse d'exécution...) ?

Voui.
Si tu es intéressé, j'ai fait une classe CheckedNumeric<T> qui
fait cela.
Elle est accessible depuis:
http://www.enseeiht.fr/~boyer/Tools.html

Si tu envisages de l'utiliser et non de t'en inspirer, prévient
moi, il y a peut-être 2-3 paufinages à faire.

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

Back to top
Marc
Guest





PostPosted: Mon Nov 08, 2004 6:08 pm    Post subject: Re: Pb de valeur limite Reply with quote

Merci à toi
j'ai jeté un coup d'oeil sur tes sources.
C'est instructif mais je vais pas les utiliser comme ça car je vais plutôt
intégrer ces contrôles à des classes existantes, qui implémentent la notion
de valeur manquante.
Si tu es intéressé, je pourrai te les envoyer, au moins pour avis...(mais
pas tout de suite car là je vais être sur autre chose).
Marc


Back to top
Andre Heinen
Guest





PostPosted: Tue Nov 09, 2004 8:16 am    Post subject: Re: Pb de valeur limite Reply with quote

On Sat, 6 Nov 2004 11:04:28 +0100, "Marc" <metrica (AT) free (DOT) fr>
wrote:

Quote:
Je m'explique : y-a-t-il un moyen que tout le monde connait sauf moi de
savoir si une opération sur des entiers (par exemple) va provoquer un
"dépassement" de valeur limite , ou doit-on le tester avant chaque
opération, comme ceci par exemple, pour une multiplication ?

Je crois que la meilleure solution est de commencer par effectuer
l'opération, et ensuite de tester les flags du processeur pour
vérifier si un problème a eu lieu. Mais évidemment, ce n'est pas
portable. De plus, toutes les opérations ne peuvent pas être
testées après coup. Une division par zéro, par exemple, arrêtera
probablement ton programme avant qu'il n'arrive au test.

Vois aussi la documentation de ton compilateur. Par exemple, en
virgule flottante, gcc utilise deux valeurs spéciales, NaN et
Inf, pour signaler les erreurs et les overflows.

--
Andre Heinen
My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz

Back to top
Marc Boyer
Guest





PostPosted: Tue Nov 09, 2004 8:19 am    Post subject: Re: Pb de valeur limite Reply with quote

Marc wrote:
Quote:
Merci à toi
j'ai jeté un coup d'oeil sur tes sources.
C'est instructif mais je vais pas les utiliser comme ça car je vais plutôt
intégrer ces contrôles à des classes existantes, qui implémentent la notion
de valeur manquante.

Oui, avec les valeurs manquantes, on doit d'abbord faire le test
de valeur manquante puis de débordement, et mes classes ne
sont pas adaptées alors.

Quote:
Si tu es intéressé, je pourrai te les envoyer, au moins pour avis...(mais
pas tout de suite car là je vais être sur autre chose).

On a le temps ;-)

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

Back to top
Alain Naigeon
Guest





PostPosted: Tue Nov 09, 2004 12:56 pm    Post subject: Re: Pb de valeur limite Reply with quote

"Marc Boyer" <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> a écrit dans le message
news: cmpuio$1he$1 (AT) news (DOT) cict.fr...

Quote:
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

Tu veux dire le seul vélo ?

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - [email]anaigeon (AT) free (DOT) fr[/email] - Strasbourg, France



Back to top
Marc Boyer
Guest





PostPosted: Tue Nov 09, 2004 1:11 pm    Post subject: Re: Pb de valeur limite Reply with quote

In article <4190c15b$0$5384$626a14ce (AT) news (DOT) free.fr>, Alain Naigeon wrote:
Quote:
"Marc Boyer" <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> a écrit dans le message
news: cmpuio$1he$1 (AT) news (DOT) cict.fr...

Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

Tu veux dire le seul vélo ?

Disons qu'en l'occurence, c'est l'infraction d'un automobiliste
qui m'a posé problème.

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

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

 
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.