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 212
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 212
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 212
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 15083 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 19 septembre 2023 159
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 212
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 212
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 15083 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 19 septembre 2023 159
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 212
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 212
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 212
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 212
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 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
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 212
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
Rejoignez-nous