Float- en dubbele variabelen maken in VEXcode Pro V5

Typen die getallen met decimalen bevatten – zwevend, dubbel

Deze gegevenstypen worden vaak drijvende-kommagegevenstypen genoemd. De getallen worden drijvende-kommagetallen 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 double-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 15 of 16.

float: in de huidige V5os lijkt de controller een precisie tot 8 decimalen toe te staan.

bijv

vlotter fvar1 = 1,12345670;
vlotter fvar2 = 1,12345678;

fval1 is het verschil met fvar2,

versus

vlotter fvar1 = 1,123456780; 
vlotter fvar2 = 1,123456781;

fval1 wordt op dezelfde manier geëvalueerd als fvar2.

dubbel: maakt tot 17 decimalen nauwkeurig.

bijv

dubbele dvar1 = 1,12345678912345678;
dubbele dvar2 = 1,12345678912345670;

dval1 verschilt van dvar2,

versus

dubbele dvar1 = 1,123456789123456789;
dubbele dvar2 = 1,123456789123456780;

dval1 wordt op dezelfde manier geëvalueerd als dvar2.


Gebruik "dubbel" niet, tenzij u hoge nauwkeurigheid nodig heeft

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

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

Gebaseerd op de VexOS – ARM 7-specificatie, kan een praalwagen 6 of 7 plaatsen aan, en een dubbelganger 15 of 16. In beide gevallen moet u niet vertrouwen op de nauwkeurigheid van de laatste cijfers in dubbel of zwevend. 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.

Het gebruik van dubbel is behoorlijk kostbaar in vergelijking met float, en veel hoger dan 'integer' vanwege iets dat drijvende-kommaberekeningen wordt genoemd.

Gebaseerd op de IEEE-standaard ligt 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 gegevenstypen uit te wisselen. Deze techniek wordt ‘gieten’ genoemd. Hoewel casten een vrij gebruikelijke praktijk is, mag u dat alleen doen als het nodig is. 

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

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

  • “int” bevat 4 bytes (of 8 bytes in sommige compilers)
  • “char” bevat slechts 1 byte.

Dus, bijv

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

of

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

Let op voor impliciete afkapping:

bijv

codesnippet3.png

Een andere veel voorkomende praktijk is het uitwisselen van int en float
vlotter fVal = 5,486;
vlotterfractie = fVal - (int)fVal; // dat doet het: 5.486 - 5

Let op voor impliciete afkapping:

bijv

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

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

Het is absoluut prima om te profiteren van impliciete afkapping, wat in sommige scenario's vaak een belangrijk onderdeel van de bedrijfsvoering is. U moet er echter voor zorgen dat u deze techniek opzettelijk gebruikt.

Als u niet wilt dat impliciete truncatie plaatsvindt, moet u expliciete casting uitvoeren:

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

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

Last Updated: