Erreur de calcul avec des variables

Signaler
Messages postés
28
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
2 octobre 2012
-
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
28
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
2 octobre 2012

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
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
c'est fait ! on verra bien si cela est accepté...

Amicalement,
Us.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
51
Salut us_30

Tu avais dit une fois que tu ferais une calculatrice
j'ai du revé
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
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.