Errore moltiplicazione

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

Dal reference:

Floating point numbers are not exact, and may yield strange results when compared. For example 6.0 / 3.0 may not equal 2.0.

Ciao
Teiolass

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

@ Teiolass : NON c'entra assolutamente nulla ... cortesemente intervenite quando sapete esattamente di cosa parlate !!!

Guglielmo

@ 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 :wink:

unsigned long a = 60 * 1000;

... e passa la paura ! XD

Del resto ... millis() è di tipo unsigned long ... quindi ... :roll_eyes:

Guglielmo

Meglio indicare eventualmente UL dopo il numero per forzare la conversione

unsigned long a = 60 * 1000UL;

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 :wink:

Guglielmo

E visto che si parla di una costante un bel

const unsigned long ...

sarebbe gradito. :wink:
Cosi il compilatore può ottimizzare meglio il codice.

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 ... :roll_eyes:

Guglielmo

Ok.
Nel caso fosse una costante allora si può ottimizzare il codice. :wink:

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

Qui chiudiamo, continua di là.