Précision de calcul....

binette1er Messages postés 26 Date d'inscription lundi 7 juillet 2003 Statut Membre Dernière intervention 24 août 2003 - 31 juil. 2003 à 12:35
gorlack Messages postés 7 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 31 juillet 2003 - 31 juil. 2003 à 14:40
Bonjour,
J'ai programmé une boucle pour faire une recherche dichotomique du genre:

limg 'limite à gauche
limd 'limite à droite
do
x=(limg+limd)/2
' définition de 2 équations f1(x) et f2(x)
.....
diff= f1(x)-f2(x)
if ( diff<0)<0 then
limg=x
else
limd=x
end if
loop while (f(x)<>0)

Mon problème est celui ci: à partir d'un certain nombre de boucles, bien que diff tende vers 0, la valeur de diff garde une meme valeur et le programme boucle indéfinimment...
j'ai remarqué à ce moment avec un débogage pas à pas que le calcul de f1(x) et f2(x) n'évoluait plus et que les valeurs de f1(x) et f2(x) avaient une meme valeur (ex:f1 affiche 325658 et f2 325658) mais que la diff se bloquait à une petite valeur (ex:0.25)....
le problème peut il être que je n'ai pas bien déclaré mes variables (j'ai tout défini comme single) ou que mes text.box (d'où je déclare des valeurs nécessaires au calcul de f1 et f2) ne sont pas bien déclarés (un nombre de 0 derrière la virgule trop faible)??
J'espère que vous comprendrez mon problème
et merci d'avance
binette1er

2 réponses

jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
31 juil. 2003 à 13:40
je pense aussi qu'il doit s'agir d'un problème de variable...
VB ,n'est pas adapté pour la précision dans les calculs.

Essai avec des Long au lieu de Single pour voir....

Sinon, code ton algo en C dans une dll et appelle la fonction de calcul depuis ton interface VB...

Bon courage...
0
gorlack Messages postés 7 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 31 juillet 2003
31 juil. 2003 à 14:40
Le mieux pour des calculs avec grande valeur et toute petite valeur est surement le Double qui vas de :

-1,79769313486232E308 à -4,94065645841247E-324 pour les valeurs négatives ;

4,94065645841247E-324 à 1,79769313486232E308 pour les valeurs positives.

La, plus de probleme de limitation :)

Pour les long, il vas jusqu'a +2 147 483 648 à 2 147 483 647 à -2 147 483 648 à 2 147 483 647 environ

Et le Single, il vas de :
-3,402823E38 à -1,401298E-45 pour les valeurs négatives

1,401298E-45 à 3,402823E38 pour les valeurs positives.

Donc je ne voie pas la limitation de f1(x) et f2(x)

En resumer, transforme tout en Double et la plus de probleme :)
0
Rejoignez-nous