Erreur "6". Probleme de Type.

Maspalio

XLDnaute Occasionnel
Bonjour le Forum.

J'ai dans mon code l’exécution suivante :

Code:
iNL = 4.5 * ((iRdyn * iDehnung1) ^ (1 / 2)) + 2 * (iDN + iI)

iNL as Double, les autres as Integer.

Selon les valeurs que j'utilise il me renvoie une Erreur "6"

Ex :

iNL = 4.5 * ((300 * 100 ^ (1 / 2)) + 2 * (32 + 126)
Aucun souci.

Mais
iNL = 4.5 * ((300 * 150 ^ (1 / 2)) + 2 * (32 + 126)
il coince. -> Erreur "6"

Cependant, je vois pas pourquoi mon Double ne fonctionne pas.. a cause des x valeurs après la virgule ?
Une solution pour palier au problème, sachant qu'en théorie et pratique, je n'aurais besoin que de 3 a 4 chiffres après la virgule.

Merci
 

Dranreb

XLDnaute Barbatruc
Re : Erreur "6". Probleme de Type.

Bonjour
300 * 100 = 30000
2 ^ 15 - 1 = 32767 (maximum supporté par un Integer sur 16 bits dont le signe)
300 * 150 = 45000 ==> dépassement de capacité
Utilisez Long, jamais Integer pour vos variables entières, à moins qu'elles ne soient destinées à s'échanger avec des paramètres ou propriétés d'objets qui vous sont imposés en Integer.
C'est même pénalisant (microscopiquement il est vrai) car le CPU est obligé de les convertir en long pour les traiter. De même je n'utilise jamais Single pour éviter des instructions supplémentaires pour le soumettre Double au coprocesseur arhitmétique ni retransformer en Single son résultat.
À+
 
Dernière édition:

Maspalio

XLDnaute Occasionnel
Re : Erreur "6". Probleme de Type.

Salut Dranreb.

Ok, je savais pas que les types des valeurs passées dans le calcul étaient si important que ça, car théoriquement et en pratique elles ne seront jamais plus grande qu'un Integer.
C#est pas le iNL qui prime ? ( qui est en Double)
 

Dranreb

XLDnaute Barbatruc
Re : Erreur "6". Probleme de Type.

Non, le type de la variable à affecter ne conditionne jamais le type de l'expression d'évaluation. Celui ci ne dépend que du type des opérandes impliqués, en général, s'ils sont différents, le type de celui qui a la plus grande capacité ou permet le plus de précision.
C'est regrettable que le produit de deux Integer ne soit pas d'office Long, d'autant que c'est le cas dans le CPU, c'est VB qui tronque !
À+
 

Discussions similaires

Réponses
20
Affichages
2 K
Réponses
2
Affichages
1 K

Statistiques des forums

Discussions
312 392
Messages
2 088 004
Membres
103 693
dernier inscrit
vincs