Erreur de calcul avec des variables

lololilizozo
Messages postés
28
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
2 octobre 2012
- 3 janv. 2012 à 16:03
us_30
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
- 15 janv. 2012 à 17:10
bonjour et bonne années a tous,
j'ai découvert un petit bug dans VB6 et VB.NET, (C# ou C++ je ne sais pas)
on prend 3 variables de type double, par exemple A, B et C.
dans la premiere on place une valeur: par exemple a=4.
dans la seconde on place un decimal: par exemple b=0.5.
et on effectue le calcul suivant:
C=A^B
si A est positif (ici 4) le resultat est ok par contre si A est negatif (par exemple -4) il y a une erreur, c'est pas normal, billoucrosoft nous joue des tour car le resultat doit etre le meme a par le signe.
voila pour la petite histoire, si quelqu'un veut bien faire l'essai avec C# ou C++ juste pour voir le resultat.

20 réponses

ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
3 janv. 2012 à 16:13
Bonjour,

Tu fais très vite d'annoncer un bug, me semble-t-il !
Aide VB6 pour l'opérateur ^:
A number can be negative only if exponent is an integer value.

of course !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
3 janv. 2012 à 16:22
et même en utilisant les logarithmes (en méthode palliative) avec la fonction Log puis la fonction Exp === >>
pour la fonction Log :
The required number argument is a Double or any valid numeric expression greater than zero .


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
3 janv. 2012 à 16:37
Message (à l'avance) à us_30

Attention à ne pas recommencer la même erreur qu'il y a deux ans, hein ... (juste pour le cas où)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
lololilizozo
Messages postés
28
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
2 octobre 2012

3 janv. 2012 à 18:36
ok desole, j'avais pas lu la msdn
par contre, ca ne fonctionne pas avec des variables mais en "dur" ca fonctionne tres bien
donc j'avais tors sur le bug mais pas sur billou
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry
Messages postés
14967
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 août 2022
161
3 janv. 2012 à 18:56
Bonjour,

Je pense que quand tu fais par variable, ça fait :
(-4)^0.5
Alors que si tu le fais en dur, ça donne :
-(4^0.5)

D'où l'absence d'erreur.
Car avec uniquement des réel, on ne peut pas faire de racine d'un nombre négatif.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
3 janv. 2012 à 18:59
Que dis-tu là !
MsgBox -4 ^ 0.5 

retournerait -2 alors que -2 n'est pas la racine de -4 (la racine carrée d'un nombre négatif ne saurait par ailleurs être un réel !)

Ce qui t'arrive est que tout simplement VB considère que tu cherches la racine de 4 (2, donc) et que tu la multiplies par - 1

Lève donc cette ambiguïté en mettant ton - 4 entre parenthèses
MsgBox (-4) ^ 0.5 

et constate que tu n'as rien résolu ainsi
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
3 janv. 2012 à 19:00
Ah ! salut, NHenry et bonne année à toi.
Croisés.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
NHenry
Messages postés
14967
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 août 2022
161
3 janv. 2012 à 19:21
Bonjour,

Bonne année à toi aussi UcFoutu :)
En effet, croisés, mais l'information est la même :)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
us_30
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
4 janv. 2012 à 20:49
Bonsoir,

Bonne année à vous.

Message (à l'avance) à l'uc-foutou...
Faire Attention à mettre l'adresse de la discution d'y a deux ans, hein ... (juste pour mieux comprendre l'allusion)

Amicalement,
Us.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
4 janv. 2012 à 20:51
Salut, us_30 (et tous mes meilleurs voeux) ===>>

Pani ploblem, la voilà donc


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
10 janv. 2012 à 23:44
Bonne année à tous (en retard)...

Pani ploblem

Tiens, tiens du créole!...

Les mathématiciens ont été amenés à définir la racine carrée d'un nombre négatif, ce qui a conduit à l'avènement des nombres complexes. L'extraction d'une racine carrée était la cinquième « opération classique », elle est aussi perçue comme une fonction.

(source: Wikipédia)
LIEN

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
11 janv. 2012 à 08:17
nombres complexes

tout est dit par ces deux mots-là
Et VB ne sait les représenter (because la partie imaginaire de tels nombres)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
us_30
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
12 janv. 2012 à 14:00
Bonjour à tous,

ucfoutu, est-ce que tu as mal écrit ? quand tu dis :
Attention à ne pas recommencer la même erreur qu'il y a deux ans, hein ... (juste pour le cas où)

car je ne vois pas d'erreur dans ma réponse ? ou bien j’interprète mal le sens de ta phrase...

Finalement, la question posée ici (1er post) trouve sa réponse dans le lien indiqué.

En l'occurrence :
1] 4^(1/2) = 2
2] -4^(1/2) = -2 car c'est équivalent à (-1)*4^(1/2)
3] (-4)^(1/2) = impossible à calculer pour les ordinateurs ! car la réponse mathématique passe par les nombres complexes non pris en compte, ici 2i (et i²=-1).

La fonction que je propose dans le lien, c'est justement le calcul du 3ième cas, c'est-à-dire (A)^n dans le cas où A est négatif et l'exposant n=1/m avec m impair. Car dans ce cas particulier, la réponse est réelle et non complexe. Exemple (-4)^(1/3) = -1.5874... pourtant les ordi ne savent pas aussi le calculer directement...

Amicalement,
Us.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
12 janv. 2012 à 16:09
Bien évidemment, us_30,
N'est-ce d'ailleurs pas là ce dont je parlais
VB a simplement choisi de traiter comme il traite.
On pourrait bien évidemment compléter VB, tant pour les cas de racines impaires entières, que pour les cas de racines "doubles" (par exemple : - 2 est, comme +2, la racine carrée de 4 ).
Mais il faut en avoir réellement besoin et il faudrait également, alors, des expressions conditionnelles (racine impaire entière à traiter différemment des racines paires) et des gestions d'erreurs !.

Dans une autre dicussion récente que tu trouveras I C I ?





____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
us_30
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
12 janv. 2012 à 21:15
Re,

Bah, finalement le souhait de traiter ces différents cas de figure, sont dans ma fonction "Puiss" (voir lien)... mais sans gestion de l'erreur dans le cas d'une solution imaginaire ! et c'est tant mieux ! Mais toutes les solutions réelles sont calculées...

Dans le discussion que tu indiques,
avec la calculatrice (-8)^(1/3) donne -2
avec le pc une erreur
et
(-8)^(2/3) ((-8)^2)^(1/3) 4
avec la calculatrice j'ai une erreur
avec le pc une erreur

sont parfaitement calculés avec ma petite fonction... CQFD

Tiens, si je la propose en snippet ?

Amicalement,
Us.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
12 janv. 2012 à 21:33
Tiens, si je la propose en snippet ?

Il FAUT le faire, us_30
Sinon on perd tout ...

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
us_30
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
12 janv. 2012 à 22:19
c'est fait ! on verra bien si cela est accepté...

Amicalement,
Us.
0
cs_ShayW
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
56
13 janv. 2012 à 12:19
Salut us_30

Tu avais dit une fois que tu ferais une calculatrice
j'ai du revé
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
13 janv. 2012 à 13:50
Salut us_30

Tu avais dit une fois que tu ferais une calculatrice


T'as vu le coup, us_30 ? "yapa" que les vieux, qui ont de la mémoire. Rassurant.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
us_30
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
15 janv. 2012 à 17:10
Bonjour à tous,

Déjà pour informer rapidement ceux qui rechercheront (plus tard) une solution au 1er post :
c'est ici http://www.codyx.org/snippet_fonction-exposant-tenant-compte-arguments-negatifs_961.aspx

=

En guise de mémoire, je pense que ShayW tu fais allusion à l'introduction de ma source :
Comme je l'avais un peu écrit sur le forum, je ferais une calculatrice !! Chouette encore une ! (si c'est la 10 000ième, j'espère que je vais gagner un prix ? )

Évidement, c'est de l'humour... d'ailleurs j'ai pas reçu de prix

Amicalement,
Us.
0