Division par 0 [Résolu]

cs_ShayW
Messages postés
3238
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
14 mars 2018
- 26 avril 2011 à 02:13 - Dernière réponse : cs_ShayW
Messages postés
3238
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
14 mars 2018
- 26 avril 2011 à 14:34
Salut à tous

à propos des divisions par 0
J'ai le code suivant

Dim x As Double
Dim y As Double
x = 0
Try
   y = 1 / x
   MessageBox.Show(y)
   Catch ex As Exception
   MessageBox.Show(ex.Message)
 End Try                


l'exception n'est pas relevé bien que x = 0
parce que y est definit double si y est integer l'exception est relevé
comment peut on relevé une exception meme si y
est definit comme double

merci
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
- 26 avril 2011 à 13:35
3
Merci
Je ne t'avais pas dit de rendre ta variable 'y' Integer, mais de tenter un Debug.Print avec cette conversion, ce qui est complètement différent, n'altère pas le contenu de ta variable et répond à ta question initiale.

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_Jack
cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
- 26 avril 2011 à 09:36
0
Merci
Salut

En effet, surprenant que 'y' affiche tranquillement "+Infini".
Encore une nouveauté .Net !
Solution :
Faire l'opération et tenter d'afficher 'y' converti en entier :
        y = 1 / x
        Try
            Debug.Print(CInt(y))
            MessageBox.Show(y)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
[img]http://allproj
Commenter la réponse de cs_Jack
cs_ShayW
Messages postés
3238
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
14 mars 2018
- 26 avril 2011 à 12:01
0
Merci
Salut
c'est peut etre une solution mais avec cint
on perd une partie de y
par ex
Dim x As Integer
Dim y As Double
Dim result As New List(Of Double)
For x = 0 To 10
    Try
       y = CInt(1 / x)
       result.Add(y)
     Catch ex As Exception
           MessageBox.Show(ex.Message)
     End Try
 Next


dans ce cas l'exception est relevé mais la list result contient que des 0

si je supprime la conversion dans la list j'ai (0) 1.#INF alors j'ai essayé d'écrire
If y.ToString <> "1.#INF" Then
    result.Add(y)
 End If     


ça ne marche pas avec le debugger quand x = 0
y.tostring = "infinty" (cela dépend du langage
qui est definit chez moi en anglais ) et non "1.#INF"
si on écrit
if y <> 1.#INF THEN
erreur identifier expected #
je cherche encore l'astuce
Commenter la réponse de cs_ShayW
BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 26 avril 2011 à 12:14
0
Merci
ça montre simplement que les valeurs étant des constantes, la division n'est pas codée car le résultat est précalculé.

Dans tous les cas on ne fait pas une gestion d'exception (au moins 200 cycles) alors qu'un pauvre test sur le diviseur (IF == 0.0) suffirait.
.NET est déjà assez lourd, inutile de lui mettre des boulets aux pieds.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
foliv57
Messages postés
423
Date d'inscription
vendredi 17 novembre 2006
Dernière intervention
15 juillet 2014
- 26 avril 2011 à 12:49
0
Merci
Bonjour à tous,

Ceci est dû à la norme IEEE 754 qui définit qu'une division par 0 de nombres à virgule flottante donne un résultat qui tend vers l'inifini.

En utilisant le type Decimal vous n'aurez pas ce problème. Meme si je rejoinds BruNews sur le fait que catcher l'exception n'est pas la solution.
Commenter la réponse de foliv57
cs_ShayW
Messages postés
3238
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
14 mars 2018
- 26 avril 2011 à 14:34
0
Merci
Merci à tous
j'ai résolu le prob avec le conseil de Jack
Commenter la réponse de cs_ShayW

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.