Egész és lebegőpontos számok


Az Arduino programozás során különböző változó típusok segítségével kezelhetjük adatainkat.
Most kezdjük a legegyszerűbb változó típussal amit persze a legtöbbször használunk, ez pedig
az int típus. Egész számok tárolására szolgál 16bitben (2byte, 65536 érték).
Int érvényességi tartománya -32768-tol 32767-ig, ha ennél nagyobb számot próbálunk eltárolni
az érték átfordul és a másik szélső értéktől kezdődik előröl a számolás.

Példa :
int egesz_szam;
void setup(){
Serial.begin(9600);
}
void loop(){
egesz_szam = 32767;
Serial.println(egesz_szam);
Serial.println(egesz_szam+1);// pozitív érték átfordul negatívba
delay(2000);
egesz_szam = -32768;
Serial.println(egesz_szam);
Serial.println(egesz_szam-1);// negatív érték átfordul pozitívba
delay(2000);
}



Van mód, hogy az int típusunkat nagyobb tartományban használhassuk ezt az unsigned int utasítással érhetjük el. Az unsigned előjel nélkül használja változónkat a pozitív tartományban:
unsigned int: 0-65535 (16bit)


unsigned int egesz = 2;
void setup(){
Serial.begin(9600);
}

void loop(){
Serial.println(egesz-1);
egesz*=2;
delay(1000);
}

A soros monitort bekapcsolva láthatjuk, hogy ha a kiírt érték eléri a 65535 azután már csak ezt az
értéket ismétli, ez azért van mert a túlcsordulás miatt ez az érték adódik a nullához és újra ezt
szorozza majd meg kettővel.


Persze tárolhatunk ennél még nagyobb egész számokat is, de ezt egy másik típusú változóval tehetjük meg. Ez a változó a long, 4byte-ban (32bit) tárolja el az értékünket -2147483648-tól
2147483647-ig. A túlcsordulás erre a változóra is érvényes és természetesen az unsigned utasítással
is működik a pozitív tartományban (0-4294967295).


A matematikai számítások nagy részénél szükséges tizedes számokat használnunk a megfelelő pontosság eléréséhez, a programozásban erre fejlesztették ki a lebegőpontos számokat.
Lebegőpontos számok tárolására a float változót használjuk, ez 32biten (4byte) tárolja a számot, -3.4028235E + 38-tól +3.4028235E + 38-ig. A float változó értékadásánál mindig fel kell tüntetni a tizedes pontot. Nézzünk egy példát:

float lebego = 3.0;
float eredmeny;
int i;
void setup(){
Serial.begin(9600);
}

void loop(){

i+=4; // i értékét növeljük 4-gyel
eredmeny = i/lebego; //maga a számítás
Serial.print(i);
Serial.print(" / 3.0 = ");
Serial.println(eredmeny); // kiíratás
delay(1000);
}


Nézzük rögtön az első sort: float lebego = 3.0; itt látható, hogy értékadáskor minden értéknél ki kell tenni a tizedes pontot, még az egészeknél is. A progi elvégzi a számítást és kiírja a megfelelő eredményt a soros monitorra.


A float számok csak 6-7 tized pontosságúak, ha ennél nagyobb pontosságot szeretnénk elérni akkor
egy másik típusú változót kell használnunk, mégpedig a double-t. A double ugyan úgy 32 biten
tárolja a számokat mint a float viszont 15 számjegy pontossággal, tehát duplán.


Folyt köv.