Création de variables flottantes et doubles dans VEXcode Pro V5

The VEX Visual Studio Code Extension has replaced VEXcode Pro V5, which is now end-of-life.

VEXcode Blocks and VEXcode Text remain actively developed and supported for all VEX platforms.

Types qui contiennent des nombres avec des décimales – float, double

Ces types de données sont souvent appelés types de données à virgule flottante. Les nombres sont appelés nombres à virgule flottante.

flottant fvar = 50,15 ;
double dvar = 50,0 ;

Comparer les types de données à virgule flottante – float et double

La différence entre un type de données float et double réside dans la précision du nombre de décimales.

Basé sur la spécification VexOS – ARM 7, float peut gérer 6 ou 7 places, et double peut en gérer 15 ou 16.

float: dans le V5os actuel, le contrôleur semble autoriser jusqu'à 8 décimales de précision.

par exemple

flotteur fvar1 = 1,12345670 ;
flottant fvar2 = 1,12345678 ;

fval1 est différent de fvar2,

contre

flotteur fvar1 = 1,123456780 ; 
flottant fvar2 = 1,123456781 ;

fval1 sera évalué de la même manière que fvar2.

double: permet jusqu'à 17 décimales de précision.

par exemple

double dvar1 = 1,12345678912345678 ;
double dvar2 = 1,12345678912345670 ;

dval1 est différent de dvar2,

contre

double dvar1 = 1,123456789123456789 ;
double dvar2 = 1,123456789123456780 ;

dval1 sera évalué de la même manière que dvar2.


N'utilisez pas « double » à moins que vous n'ayez besoin d'une grande précision

Il y a deux raisons pour lesquelles vous ne devriez pas utiliser « double » sauf si vous avez besoin d'une haute précision :

  1. Il prend le type float 2X.
  2. Cela nécessite une puissance de traitement beaucoup plus élevée.

Basé sur la spécification VexOS – ARM 7, un flotteur peut faire 6 ou 7 places, et un double peut en gérer 15 ou 16. Dans les deux cas, vous ne devez pas vous fier à l’exactitude des derniers chiffres en double ou en float. Il est stocké très différemment du stockage d'un « int » en raison de ce qu'on appelle le « calcul à virgule flottante » (qui sort du cadre de cet article).

Ainsi, vous risquez de perdre la précision aux dernières décimales.

L'opération sur double est assez coûteuse par rapport à celle sur flotteur, et bien supérieure à celle sur « entier » en raison de ce qu'on appelle les calculs à virgule flottante.

Basé sur la norme IEEE, les valeurs suivantes se situent dans une plage plus fiable.

Taper La plus petite valeur positive La plus grande valeur positive # de précision
flotter 10 -38 x 1,17549 10 38 x 3.40282 6 chiffres
double 10 -308 ou 2,22507 10 308 x 1,79769 15 chiffres

Pouvez-vous échanger des types de données primitifs ? - Coulée

Il est possible d'échanger des types de données. Cette technique est appelée « Casting ». Bien que le casting soit une pratique plutôt courante, ne le faites que si cela est nécessaire. 

L’une des pratiques les plus courantes consiste à échanger char et int.

En effet, ils représentent tous deux des valeurs entières à une exception près : 

  • "int" contient 4 octets (ou 8 octets dans certains compilateurs)
  • « char » ne contient qu'un seul octet.

Alors, par exemple

char aVal = 100 ;
int iVal = aVal ; // casting implicite

ou

int iVal = (char) aVal; // casting explicite.

Attention à la troncature implicite :

par exemple

Schéma illustrant les fonctionnalités de programmation du système robotique V5, mettant en évidence les composants clés et les connexions pour une programmation efficace du robot.

Une autre pratique courante consiste à échanger des int et des float
flottant fVal = 5,486 ;
fraction flottante = fVal - (int)fVal ; //c'est le cas : 5,486 - 5

Attention à la troncature implicite :

par exemple

int iVal = 50 ;
flottant fVal = iVal / 100 ;

maintenant fVal = 0,0, PAS 0,5.

Il est tout à fait possible de tirer parti de la troncature implicite, qui constitue souvent une partie importante des opérations dans certains scénarios. Cependant, vous devez vous assurer que vous utilisez cette technique dès la conception.

Si vous ne souhaitez pas qu'une troncature implicite ait lieu, vous devez effectuer un casting explicite :

  • casting implicite : float fVal = iVal / 100.0 ;
  • casting explicite : float fVal = (float) iVal / 100

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: