Tworzenie zmiennych typu float i double w 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.

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:

  1. Zajmuje typ pływakowy 2X.
  2. 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

Schemat ilustrujący funkcje programowania systemu robotycznego V5, podkreślający kluczowe komponenty i połączenia umożliwiające efektywne programowanie robota.

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

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

Last Updated: