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.
Tipi che contengono numeri con cifre decimali: float, double
Questi tipi di dati sono spesso chiamati tipi di dati a virgola mobile. I numeri sono indicati come numeri in virgola mobile.
valore float = 50,15; doppio dvar = 50,0;
Confronta i tipi di dati in virgola mobile: float e double
La differenza tra un tipo di dati float e double riguarda la precisione del numero di cifre decimali.
Basato sulla specifica VexOS – ARM 7, float può gestire 6 o 7 posti e double può gestirne 15 o 16.
float: negli attuali V5os, il controller sembra consentire fino a 8 cifre decimali di precisione.
per esempio
float fvar1 = 1.12345670; float fvar2 = 1,12345678;
fval1 è diverso da fvar2,
contro
float fvar1 = 1.123456780; float fvar2 = 1,123456781;
fval1 verrà valutato allo stesso modo di fvar2.
doppio: consente fino a 17 cifre decimali di precisione.
per esempio
doppio dvar1 = 1.12345678912345678; doppio dvar2 = 1.12345678912345670;
dval1 è diverso da dvar2,
contro
doppio dvar1 = 1.123456789123456789; doppio dvar2 = 1.123456789123456780;
dval1 verrà valutato allo stesso modo di dvar2.
Non usare "doppio" a meno che non ti serva un'elevata precisione
Ci sono due ragioni per cui non dovresti usare "double" a meno che tu non abbia bisogno di alta precisione:
- Occupa il tipo float 2X.
- Richiede una potenza di elaborazione molto più elevata.
In base alla specifica VexOS – ARM 7, un float può gestire 6 o 7 posti e un double può gestirne 15 o 16. In entrambi i casi, non dovresti fare affidamento sulla precisione delle ultime cifre in double o float. Viene memorizzato in modo molto diverso dalla memorizzazione di un "int" a causa di qualcosa chiamato "calcolo in virgola mobile" (che esula dallo scopo di questo articolo).
Pertanto, potresti perdere la precisione delle ultime cifre decimali.
L'operazione su double è piuttosto costosa rispetto a float e molto più elevata di "integer" a causa di qualcosa chiamato calcoli in virgola mobile.
In base allo standard IEEE, quanto segue rientra in un intervallo più affidabile.
| Tipo | Valore positivo più piccolo | Valore positivo più grande | # di precisione |
|---|---|---|---|
| galleggiante | 10 -38 x 1,17549 | 10 38 x 3.40282 | 6 cifre |
| Doppio | 10 -308 o 2.22507 | 10 308 x 1,79769 | 15 cifre |
È possibile scambiare i tipi di dati primitivi? - Fusione
È possibile scambiare i tipi di dati. Questa tecnica è chiamata “Casting”. Sebbene il casting sia una pratica piuttosto comune, fallo solo se è necessario.
Una delle pratiche più comuni è quella di scambiare char e int.
Questo perché entrambi rappresentano valori interi con un'eccezione:
- "int" contiene 4 byte (o 8 byte in alcuni compilatori)
- "char" contiene solo 1 byte.
Quindi, ad es
carattere aVal = 100; int iVal = aVal; // casting implicito
O
int iVal = (char) aVal; // casting esplicito.
Attenzione al troncamento implicito:
per esempio
Un'altra pratica comune è quella di scambiare int e float
float fVal = 5,486; frazione float = fVal - (int)fVal; //fa: 5.486 - 5
Attenzione al troncamento implicito:
per esempio
int iVal = 50; float fVal = iVal / 100;
ora fVal = 0,0, NON 0,5.
È assolutamente corretto sfruttare il troncamento implicito, che spesso costituisce una parte importante delle operazioni in alcuni scenari. Tuttavia, devi assicurarti di utilizzare questa tecnica in base alla progettazione.
Se non desideri che avvenga il troncamento implicito, devi eseguire il casting esplicito:
- casting implicito:
float fVal = iVal / 100,0; - casting esplicito:
float fVal = (float) iVal / 100