Skapa flyttalls- och dubbla variabler i 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.

Typer som innehåller tal med decimaler – flyttal, dubbel

Dessa datatyper kallas ofta flyttal. Siffrorna kallas flyttal med.

float fvar = 50,15;
dubbel dvar = 50,0;

Jämför flyttaldatatyper – float och double

Skillnaden mellan en flyttal och en dubbel datatyp handlar om precisionen för antalet decimaler.

Baserat på VexOS – ARM 7-kan float hantera 6 eller 7 platser, och double kan hantera 15 eller 16.

float: i nuvarande V5os verkar regulatorn tillåta upp till 8 decimaler med precision.

till exempel

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

fval1 skiljer sig från fvar2,

mot

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

fval1 kommer att utvärderas på samma sätt som fvar2.

dubbel: tillåter upp till 17 decimaler med precision.

till exempel

dubbel dvar1 = 1.12345678912345678;
dubbel dvar2 = 1.12345678912345670;

dval1 skiljer sig från dvar2,

mot

dubbel dvar1 = 1.123456789123456789;
dubbel dvar2 = 1.123456789123456780;

dval1 kommer att utvärderas på samma sätt som dvar2.


Använd inte "dubbel" om du inte behöver hög precision

Det finns två anledningar till att du inte bör använda "double" om du inte behöver hög precision:

  1. Den tar upp 2X flyttyp.
  2. Den kräver mycket högre processorkraft.

Baserat på VexOS – ARM 7-specifikationenkan en float hantera 6 eller 7 siffror, och en double kan hantera 15 eller 16. I båda fallen bör du inte lita på noggrannheten hos de sista siffrorna i dubbel- eller flyttalssiffrorna. Den lagras väldigt annorlunda än att lagra ett "heltal" på grund av något som kallas "flyttalspunktsberäkning" (vilket ligger utanför ramen för den här artikeln).

Således kan du eventuellt förlora noggrannheten vid de sista decimalerna.

Operation på double är ganska kostsam jämfört med float, och mycket högre än "heltal" på grund av något som kallas flyttalsberäkningar.

Baserat på IEEE-standarden ligger följande inom ett mer tillförlitligt intervall.

Typ Minsta positiva värde Största positiva värdet # Precision
flyta 10 -38 x 1,17549 10 38 x 3,40282 6 siffror
dubbel 10 -308 eller 2,22507 10 308 x 1,79769 15 siffror

Kan man utbyta primitiva datatyper? - Gjutning

Det är möjligt att utbyta datatyper. Denna teknik kallas "gjutning". Även om gjutning är en ganska vanlig praxis, gör det bara om det är nödvändigt. 

En av de vanligaste metoderna är att utbyta char och int.

Detta beror på att båda representerar heltal med ett undantag: 

  • "int" innehåller 4 byte (eller 8 byte i vissa kompilatorer)
  • "Char" innehåller bara 1 byte.

Så, t.ex.

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

eller

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

Varning för implicit trunkering:

till exempel

Diagram som illustrerar programmeringsfunktionerna i V5-robotsystemet, med framhävning av viktiga komponenter och anslutningar för effektiv robotprogrammering.

En annan vanlig praxis är att utbyta int och float
flyttal fVal = 5,486;
flyttalsfraktion = fVal - (int)fVal; //det gör det: 5,486 - 5

Varning för implicit trunkering:

till exempel

int iVärde = 50;
flyttal fVärde = iVärde / 100;

nu är fVal = 0,0, INTE 0,5.

Det är helt okej att dra nytta av implicit trunkering, vilket ofta är en viktig del av operationerna i vissa scenarier. Du måste dock se till att du använder den här tekniken avsiktligt.

Om du inte vill att implicit trunkering ska ske måste du göra explicit casting:

  • implicit casting: flyttal fVal = iVal / 100.0;
  • explicit casting: flyttal fVal = (flytal) iVal / 100

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

Last Updated: