Kelluvien ja kaksoismuuttujien luominen VEXcode Pro V5:ssä

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.

Tyypit, joissa on desimaalilukuja – float, double

Näitä tietotyyppejä kutsutaan usein liukulukutietotyypeiksi. Numeroita kutsutaan liukulukuluvuiksi.

float fvar = 50,15;
kaksoisdvar = 50,0;

Vertaa liukulukutietotyyppiä – float ja double

Ero kelluvan ja kaksoistietotyypin välillä on kyse desimaalien tarkkuudesta.

VexOS – ARM 7 -spesifikaatioonperustuen kelluva pystyy käsittelemään 6 tai 7 paikkaa ja double 15 tai 16 paikkaa.

float: nykyisessä V5:ssä ohjain näyttää sallivan jopa 8 desimaalin tarkkuuden.

esim

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

fval1 on eri kuin fvar2,

vs

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

fval1 arvioidaan samalla tavalla kuin fvar2.

double: mahdollistaa jopa 17 desimaalin tarkkuuden.

esim

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

dval1 on eri kuin dvar2,

vs

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

dval1 arvioidaan samalla tavalla kuin dvar2.


Älä käytä "kaksinkertaista", ellet tarvitse suurta tarkkuutta

On kaksi syytä, miksi sinun ei pitäisi käyttää "kaksinkertaista", ellet tarvitse suurta tarkkuutta:

  1. Se kestää 2X float-tyypin.
  2. Se vie paljon enemmän prosessointitehoa.

VexOS – ARM 7 -spesifikaatioonperustuen kelluke voi tehdä 6 tai 7 paikkaa ja tupla 15 tai 16 paikkaa. Kummassakaan tapauksessa sinun ei pitäisi luottaa tupla- tai float-numeroiden viimeisten numeroiden tarkkuuteen. Se tallennetaan hyvin eri tavalla kuin "int":n tallentaminen johtuen "liukulukulaskunnasta" (joka ei kuulu tämän artikkelin soveltamisalaan).

Näin ollen saatat menettää tarkkuuden muutaman viimeisen desimaalin kohdalla.

Kaksoiskäyttö on melko kallista verrattuna float-toimintoon ja paljon suurempi kuin "kokonaisluku" johtuen niin kutsutusta liukulukulaskunnasta.

IEEE-standardin perusteella seuraava on luotettavammalla alueella.

Tyyppi Pienin positiivinen arvo Suurin positiivinen arvo Tarkkuus #
kellua 10 -38 x 1,17549 10 38 x 3,40282 6 numeroa
kaksinkertainen 10 -308 tai 2.22507 10 308 x 1,79769 15 numeroa

Voitko vaihtaa primitiivisiä tietotyyppejä? - Casting

Tietotyyppejä on mahdollista vaihtaa keskenään. Tätä tekniikkaa kutsutaan "valuksi". Vaikka valu on melko yleinen käytäntö, tee se vain, jos se on välttämätöntä. 

Yksi yleisimmistä käytännöistä on vaihtaa char ja int.

Tämä johtuu siitä, että ne molemmat edustavat kokonaislukuja yhtä poikkeusta lukuun ottamatta: 

  • "int" sisältää 4 tavua (tai 8 tavua jossain kääntäjässä)
  • "char" sisältää vain 1 tavun.

Eli esim

char aVal = 100;
int iVal = aVal; // implisiittinen valu

tai

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

Varoitus implisiittistä katkaisua varten:

esim

codesnippet3.png

Toinen yleinen käytäntö on vaihtaa int ja float
float fVal = 5,486;
float-fraktio = fVal - (int)fVal; //se tekee: 5.486 - 5

Varoitus implisiittistä katkaisua varten:

esim

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

nyt fVal = 0,0, EI 0,5.

On aivan hienoa hyödyntää implisiittistä katkaisua, joka on joissakin skenaarioissa usein tärkeä osa toimintaa. Sinun on kuitenkin varmistettava, että käytät tätä tekniikkaa suunnittelun mukaan.

Jos et halua implisiittistä katkaisua, sinun on suoritettava eksplisiittinen valu:

  • implisiittinen valu: float fVal = iVal / 100,0;
  • eksplisiittinen heitto: float fVal = (float) iVal / 100

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

Last Updated: