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.
Typy przechowujące liczby z miejscami dziesiętnymi – float, double
Te typy danych są często nazywane typami danych zmiennoprzecinkowych. Liczby są określane jako liczb zmiennoprzecinkowych.
float fvar = 50,15; podwójny dvar = 50,0;
Porównaj typy danych zmiennoprzecinkowych – float i double
Różnica między typem danych float i double polega na precyzji liczby miejsc dziesiętnych.
W oparciu o specyfikację VexOS – ARM 7, float może obsłużyć 6 lub 7 miejsc, a double może obsłużyć 15 lub 16.
float: w obecnym V5os kontroler wydaje się umożliwiać dokładność do 8 miejsc po przecinku.
np
float fvar1 = 1,12345670; float fvar2 = 1,12345678;
fval1 różni się od fvar2,
vs
float fvar1 = 1,123456780; float fvar2 = 1,123456781;
fval1 będzie oceniany tak samo jak fvar2.
double: pozwala na dokładność do 17 miejsc po przecinku.
np
podwójny dvar1 = 1,12345678912345678; podwójne dvar2 = 1,12345678912345670;
dval1 różni się od dvar2,
vs
podwójny dvar1 = 1,123456789123456789; podwójne dvar2 = 1,123456789123456780;
dval1 będzie oceniany tak samo jak dvar2.
Nie używaj „double”, chyba że potrzebujesz wysokiej precyzji
Są dwa powody, dla których nie powinieneś używać „podwójnego”, chyba że potrzebujesz dużej precyzji:
- Zajmuje typ pływakowy 2X.
- Zajmuje znacznie większą moc obliczeniową.
W oparciu o specyfikację VexOS – ARM 7pływak może zająć 6 lub 7 miejsc, a podwójny może obsłużyć 15 lub 16. W obu przypadkach nie należy polegać na dokładności ostatnich cyfr w przypadku liczb podwójnych lub zmiennoprzecinkowych. Jest przechowywany zupełnie inaczej niż przechowywanie „int” ze względu na coś, co nazywa się „obliczaniem zmiennoprzecinkowym” (co wykracza poza zakres tego artykułu).
Dlatego możesz stracić dokładność kilku ostatnich miejsc po przecinku.
Operacja na liczbie podwójnej jest dość kosztowna w porównaniu z liczbą zmiennoprzecinkową i znacznie wyższa niż „liczba całkowita” ze względu na coś, co nazywa się obliczeniami zmiennoprzecinkowymi.
W oparciu o standard IEEE poniższe wartości mieszczą się w bardziej niezawodnym zakresie.
| Typ | Najmniejsza wartość dodatnia | Największa wartość dodatnia | # precyzji |
|---|---|---|---|
| platforma | 10 -38 x 1,17549 | 10 38 | 6 cyfr |
| podwójnie | 10 -308 lub 2,22507 | 10 308 x 1,79769 | 15 cyfr |
Czy można zamieniać prymitywne typy danych? - Odlewanie
Istnieje możliwość zamiany typów danych. Technika ta nazywa się „Casting”. Chociaż rzucanie jest dość powszechną praktyką, rób to tylko wtedy, gdy jest to konieczne.
Jedną z najczęstszych praktyk jest zamiana typów char i int.
Dzieje się tak, ponieważ oba reprezentują wartości całkowite z jednym wyjątkiem:
- „int” zawiera 4 bajty (lub 8 bajtów w niektórych kompilatorach)
- „char” zawiera tylko 1 bajt.
Więc np
znak aWartość = 100; int iVal = aVal; // niejawne rzutowanie
Lub
int iVal = (char) aVal; // jawne rzutowanie.
Uwaga dotycząca ukrytego obcięcia:
np
Inną powszechną praktyką jest zamiana int i float
pływak fVal = 5,486; frakcja zmiennoprzecinkowa = fVal - (int)fVal; //działa: 5.486 - 5
Uwaga dotycząca ukrytego obcięcia:
np
int iVal = 50; pływak fVal = iVal / 100;
teraz fVal = 0,0, NIE 0,5.
Nie ma nic złego w korzystaniu z ukrytego obcięcia, które w niektórych scenariuszach często stanowi ważną część operacji. Musisz jednak upewnić się, że używasz tej techniki zgodnie z projektem.
Jeśli nie chcesz, aby miało miejsce ukryte obcięcie, musisz wykonać jawne rzutowanie:
- niejawne rzutowanie:
float fVal = iVal / 100,0; - jawne rzutowanie:
float fVal = (float) iVal / 100