system
July 17, 2014, 2:00pm
1
Arduino non mi permette di moltiplicare i numeri da 40 in poi per 1000 ad esempio
void setup() {
Serial.begin(9600);
}
void loop() {
float a = 60 * 1000;
Serial.print(a);
}
il risultato è -5536 .-. ??? what ??
ho bisogno di effettuare una conversione da secondi a millisecondi, l'unico metodo che conosco è la moltiplicazione per 1000
gpb01
July 17, 2014, 2:10pm
3
No, sei tu che stai sbagliando ...
60 è un intero, 1000 è un intero ... 60 x 1000 = 60000, ma gli interi vanno da -32768 a +32767 quindi prendi 60000, fai il complemento a 2 e ... avrai esattamente -5536 XD
Se vuoi lavorare con i float devi scrivere
float a = 60.0 * 1000.0;
... per dirgli che quelli non sono interi ma float !
Guglielmo
gpb01
July 17, 2014, 2:11pm
4
@ Teiolass : NON c'entra assolutamente nulla ... cortesemente intervenite quando sapete esattamente di cosa parlate !!!
Guglielmo
gpb01
July 17, 2014, 2:14pm
5
@ overflowsystem : comunque scusa ... ma perché vai a disturbare i float che non sono neanche così precisi ???
Usa gli unsigned long (32 bit) che vanno da 0 a 4'294'967'295
unsigned long a = 60 * 1000;
... e passa la paura ! XD
Del resto ... millis() è di tipo unsigned long ... quindi ...
Guglielmo
PaoloP
July 17, 2014, 4:07pm
6
Meglio indicare eventualmente UL dopo il numero per forzare la conversione
unsigned long a = 60 * 1000UL;
gpb01
July 17, 2014, 4:17pm
7
PaoloP:
Meglio indicare eventualmente UL dopo il numero per forzare la conversione ...
GIUSTO ...
... senza non mi ha mai dato problemi, ma è comunque corretto specificare il tipo di dato quando può essere ambiguo
Guglielmo
PaoloP
July 17, 2014, 4:38pm
8
E visto che si parla di una costante un bel
const unsigned long ...
sarebbe gradito.
Cosi il compilatore può ottimizzare meglio il codice.
gpb01
July 17, 2014, 4:46pm
9
PaoloP:
E visto che si parla di una costante ...
Mmm ... non mi pare che overflowsystem parli di costanti ... anzi, sono calcoli dinamici di trasformazione da secondi a millisecondi ...
Guglielmo
PaoloP
July 17, 2014, 4:51pm
10
Ok.
Nel caso fosse una costante allora si può ottimizzare il codice.
overflowsystem:
Arduino non mi permette di moltiplicare i numeri da 40 in poi per 1000 ad esempio
@overflow , il cross-posting è vietato:
http://forum.arduino.cc/index.php?topic=255595.msg1808296#msg1808296
Ti rispondiamo in italiano o in inglese ?
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento
leo72
July 17, 2014, 7:46pm
13
Qui chiudiamo, continua di là.