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:
- Den tar upp 2X flyttyp.
- 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
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