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.
Típusok, amelyek számokat tartalmaznak tizedesjegyekkel – float, double
Ezeket az adattípusokat gyakran lebegőpontos adattípusoknak nevezik. A számokra lebegőpontos számként hivatkozunk.
float fvar = 50,15;
dupla dvar = 50,0;
Hasonlítsa össze a lebegőpontos adattípust – float és double
A float és a dupla adattípus közötti különbség a tizedesjegyek pontosságában rejlik.
A VexOS – ARM 7 specifikációalapján a float 6 vagy 7 helyiértéket, míg a double 15-öt vagy 16-ot tud kezelni.
float: a jelenlegi V5os-ban úgy tűnik, hogy a vezérlő legfeljebb 8 tizedesjegy pontosságot tesz lehetővé.
például
float fvar1 = 1,12345670;
float fvar2 = 1,12345678;
Az fval1 különbözik az fvar2-től,
vs
float fvar1 = 1,123456780;
float fvar2 = 1,123456781;
Az fval1 ugyanúgy lesz kiértékelve, mint az fvar2.
double: 17 tizedesjegy pontosságot tesz lehetővé.
például
dupla dvar1 = 1,12345678912345678;
dupla dvar2 = 1,12345678912345670;
a dval1 különbözik a dvar2-től,
vs
dupla dvar1 = 1,123456789123456789;
dupla dvar2 = 1,123456789123456780;
A dval1 ugyanúgy lesz kiértékelve, mint a dvar2.
Ne használja a "kettőt", hacsak nincs szüksége nagy pontosságra
Két oka van annak, hogy ne használja a „dupla” kifejezést, hacsak nem nagy pontosságra van szüksége:
- 2X float típust foglal el.
- Sokkal nagyobb feldolgozási teljesítményt igényel.
A VexOS – ARM 7 specifikációalapján egy úszótest 6 vagy 7 helyet képes kezelni, míg egy duplatest 15 vagy 16-ot. Egyik esetben sem szabad az utolsó számjegyek pontosságára hagyatkoznia a dupla vagy lebegő számok között. A tárolás nagyon eltér az „int” tárolásától, az úgynevezett „lebegőpontos számítás” miatt (amely kívül esik ennek a cikknek a hatókörén).
Így előfordulhat, hogy elveszítheti a pontosságot az utolsó néhány tizedesjegynél.
A duplán történő művelet meglehetősen költséges a lebegőpontos számításokhoz képest, és sokkal magasabb, mint az „egész szám”, az úgynevezett lebegőpontos számítások miatt.
Az IEEE szabvány alapján a következő megbízhatóbb tartományba esik.
| Típus | Legkisebb pozitív érték | Legnagyobb pozitív érték | Pontosság száma |
|---|---|---|---|
| úszó | 10 -38 × 1,17549 | 10 38 × 3,40282 | 6 számjegy |
| kettős | 10 -308 vagy 2,22507 | 10 308 × 1,79769 | 15 számjegy |
Fel lehet cserélni a primitív adattípusokat? - Öntés
Lehetőség van adattípusok cseréjére. Ezt a technikát „öntésnek” nevezik. Bár az öntés meglehetősen általános gyakorlat, ezt csak akkor végezze, ha szükséges.
Az egyik leggyakoribb gyakorlat a char és az int cseréje.
Ennek az az oka, hogy mindkettő egész értékeket képvisel, egy kivétellel:
- Az "int" 4 bájtot tartalmaz (vagy 8 bájtot egyes fordítóprogramokban)
- A „char” csak 1 bájtot tartalmaz.
Tehát pl
char aVal = 100;
int iVal = aVal; // implicit öntés
vagy
int iVal = (char) aVal; // explicit konvertálás.
Figyelmeztetés az implicit csonkolásra:
például
#include "vex.h"
using namespace vex;
int main() {
// Robot konfigurációjának inicializálása. NE ELTÁVOLÍTSA!
vexcodeInit();
int iVal = 128;
char aVal = (char) iVal; // ROSSZ!!! Az aVal csak -128 és 127 közötti értékeket tartalmazhat.
}Egy másik gyakori gyakorlat az int és a float cseréje
float fVal = 5,486;
float frakció = fVal - (int)fVal; //megteszi: 5,486 - 5
Figyelmeztetés az implicit csonkolásra:
például
int iVal = 50;
float fVal = iVal / 100;
most fVal = 0,0, NEM 0,5.
Teljesen rendben van, ha kihasználjuk az implicit csonkolást, amely bizonyos forgatókönyvekben gyakran a műveletek fontos része. Azonban meg kell győződnie arról, hogy ezt a technikát tervezve alkalmazza.
Ha nem szeretné, hogy implicit csonkítás történjen, akkor explicit öntést kell végrehajtania:
- implicit öntés:
float fVal = iVal / 100,0; - explicit öntés:
float fVal = (float) iVal / 100