Float- en dubbele variabelen maken in VEXcode Pro V5

Typen die getallen met decimalen bevatten – zwevend, dubbel

Deze gegevenstypen worden vaak gegevenstypen met drijvende komma genoemd. De getallen worden drijvende-komma getallen genoemd.

vlotter fvar = 50,15;
dubbele dvar = 50.0;

Vergelijk het gegevenstype met drijvende komma - zwevend en dubbel

Het verschil tussen een float en een dubbel gegevenstype heeft alles te maken met de precisie op het aantal decimalen.

Gebaseerd op de VexOS – ARM 7-specificatie, kan float 6 of 7 plaatsen aan en double kan 15 of 16 aan .

float: in de huidige V5os lijkt de controller tot 8 decimalen nauwkeurig te zijn.

bijv.

float fvar1 = 1.12345670;
float fvar2 = 1.12345678;

fval1 is anders dan fvar2,

vs.

float fvar1 = 1.123456780; 
float fvar2 = 1.123456781;

fval1 wordt op dezelfde manier geëvalueerd als fvar2.

dubbel: tot 17 decimalen nauwkeurig.

bijv.

dubbele dvar1 = 1.12345678912345678;
dubbele dvar2 = 1.12345678912345670;

dval1 is anders dan dvar2,

vs.

dubbele dvar1 = 1.123456789123456789;
dubbele dvar2 = 1.123456789123456780;

dval1 wordt op dezelfde manier geëvalueerd als dvar2.


Gebruik geen "dubbel" tenzij u hoge precisie nodig heeft

Er zijn twee redenen waarom u "dubbel" niet zou moeten gebruiken, tenzij u hoge precisie nodig heeft:

  1. Het neemt 2X float-type in beslag.
  2. Het kost veel meer rekenkracht.

Gebaseerd op de VexOS – ARM 7-specificatie, kan een float 6 of 7 plaatsen aan en een double kan er 15 aan of 16. In beide gevallen moet u niet vertrouwen op de nauwkeurigheid van de laatste cijfers in double of float. Het wordt heel anders opgeslagen dan het opslaan van een "int" vanwege iets dat "float-point-berekening" wordt genoemd (wat buiten het bestek van dit artikel valt).

Het is dus mogelijk dat u de nauwkeurigheid op de laatste paar decimalen verliest.

Operatie op dubbel is vrij duur in vergelijking met float, en veel hoger dan 'integer' vanwege iets dat drijvende-kommaberekeningen wordt genoemd.

Op basis van de IEEE-standaard valt het volgende binnen een betrouwbaarder bereik.

Type Kleinste positieve waarde Grootste positieve waarde # van precisie
vlot 10 -38 x 1.17549 10 38 x 3.40282 6 cijfers
dubbele 10 -308 of 2.22507 10 308 x 1.79769 15 cijfers

Kun je primitieve gegevenstypen uitwisselen? - Gieten

Het is mogelijk om datatypes uit te wisselen. Deze techniek wordt "Casting" genoemd. Hoewel casten een vrij gebruikelijke praktijk is, doe dat dan alleen als het nodig is.

Een van de meest voorkomende praktijken is het uitwisselen van char en int.

Dit komt omdat ze beide gehele waarden vertegenwoordigen met één uitzondering:

  • "int" bevat 4-bytes (of 8-bytes in sommige compiler)
  • "char" bevat slechts 1-byte.

Dus bijv.

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

of

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

Opgelet voor impliciete inkorting:

bijv.

codesnippet3.png

Een andere veel voorkomende praktijk is om int en float uit te wisselen
vlotter fVal = 5,486;
zwevende breuk = fVal - (int)fVal; // het doet: 5.486 - 5

Opgelet voor impliciete inkorting:

bijv.

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

nu fVal = 0,0, NIET 0,5.

Het is absoluut prima om te profiteren van impliciete inkorting, wat in sommige scenario's vaak een belangrijk onderdeel van bewerkingen is. U moet er echter voor zorgen dat u deze techniek by design toepast.

Als u niet wilt dat impliciete truncatie plaatsvindt, moet u expliciet casten:

  • impliciete casting: float fVal = iVal / 100.0;
  • expliciete casting: float fVal = (float) iVal / 100