OVH Cloud OVH Cloud

Opérateur * et Dépassement de capacité

11 réponses
Avatar
Curl
Bonjour..

Je commence à perdre les pédales.

Dim glong as Long
glong = 256 * 255

m'indique un dépassement de capacité .

Pourquoi ?

1 réponse

1 2
Avatar
J-M Rabilloud [MVP]
C'est un reste des temps anciens ou VB était purement interprété. Utiliser
des règles de contraintes de type permettait d'accélérer le code.


"Patrice Henrio" a écrit :

Je suis d'accord avec le troll. La déclaration du résultat en tant que long
devrait forcer Vb à faire tous ses calculs dans ce type.
Et j'estime que c'est un bug de la part des programmeurs qui ont conçu Vb de
n'avoir pas raisonner de la manière suivante

result=op1 * op2
Chaque variable est transtypée dans le type le plus précis des trois
variables (ou constantes).

Plusiurs anciens langages fonctionnaient comme cela à la satisfaction
générale.

J'admets cependant que grâce à jean-Marc et sa traduction je sias au moins
pourquoi Vb "plante" sur ce cas.

"le_troll" a écrit dans le message de news:

> Salut, ben ça sert à quoi alors de déclarer un LONG, si VB en fait
> ce qu'il veut, c'est qui, qui commande ici, lol!
>
> --
> Merci, @+, bye, Joe
> troll75 AROBASE iFrance POINT com
> ------------------------------------------
> Le_Troll, éleveur de Trolls depuis César, qui disait:
> Avec une hache, celui qui tient le manche a toujours raison !
>
>
> "RABILLOUD JMARC [MVP]" a écrit
> dans le message de news:
>> En fait c'est du aux règles de contrainte de type qu'utilise VB.
>> Pour aller plus vite, VB dimensionne toujours au plus juste toute les
>> variables (à prendre dans le sens large) au type le plus petit possible.
>> Quand tu écris
>> glong = 255 *256
>> il travaille au niveau type sur
>> long = integer * integer
>>
>> Hors la règle de contrainte indique que la variable de calcul
> intermédiaire
>> sera du type le plus grand des variables participant à l'opération. Dans
> ce
>> cas là integer puisque les deux variables sont du même type. C'est pour
> cela
>> que tu as une erreur.
>> Si tu écrit
>> glong%5& * 256
>> il lit long=long*integer, il travaille sur un long et il n'y a pas
> d'erreur.
>>
>>
>> "Patrice Henrio" a écrit dans le message de
>> news: %23$
>> > Toutes les réponses données sont belles et bonnes mais n'expliquent pas
>> > pourquoi VB est incapable du transtypage dans ce cas.
>> > Bien sûr on peut remarquer que cela provient du fait que le résultat
> n'est
>> > pas du même type "naturel" que les opérandes, mais quand même !
>> >
>> > "le_troll" a écrit dans le message de news:
>> > %23xw14$
>> >> Bonjour, ça aussi ça, marche...
>> >>
>> >> dim x as long
>> >> dim y as long
>> >> dim z as long
>> >> x = 256
>> >> y = 256
>> >> z = x * y
>> >>
>> >> --
>> >> Merci, @+, bye, Joe
>> >> troll75 AROBASE iFrance POINT com
>> >> ------------------------------------------
>> >> Le_Troll, éleveur de Trolls depuis César, qui disait:
>> >> Avec une hache, celui qui tient le manche a toujours raison !
>> >>
>> >>
>> >> "Curl" a écrit dans le message de
>> >> news:41514ecd$0$12983$
>> >>> Bonjour..
>> >>>
>> >>> Je commence à perdre les pédales.
>> >>>
>> >>> Dim glong as Long
>> >>> glong = 256 * 255
>> >>>
>> >>> m'indique un dépassement de capacité .
>> >>>
>> >>> Pourquoi ?
>> >>>
>> >>
>> >>
>> >
>> >
>>
>>
>
>





1 2