Go Down

Topic: Errore moltiplicazione (Read 358 times) previous topic - next topic

Arduino non mi permette di moltiplicare i numeri da 40 in poi per  1000 ad esempio
Code: [Select]
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:

Quote
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
Teiolass

gpb01

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

Code: [Select]
float a = 60.0 * 1000.0;

... per dirgli che quelli non sono interi ma float !

Guglielmo
Search is Your friend ... or I am Your enemy !

gpb01

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

Guglielmo
Search is Your friend ... or I am Your enemy !

gpb01

@ 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 ;)

Code: [Select]
unsigned long a = 60 * 1000;

... e passa la paura !  XD

Del resto ... millis() è di tipo unsigned long ... quindi ...  :smiley-roll:

Guglielmo
Search is Your friend ... or I am Your enemy !

PaoloP

Meglio indicare eventualmente UL dopo il numero per forzare la conversione
Code: [Select]
unsigned long a = 60 * 1000UL;

gpb01


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
Search is Your friend ... or I am Your enemy !

PaoloP

E visto che si parla di una costante un bel
Code: [Select]
const unsigned long ...
sarebbe gradito.  ;)
Cosi il compilatore può ottimizzare meglio il codice.

gpb01


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 ...  :smiley-roll:

Guglielmo
Search is Your friend ... or I am Your enemy !

PaoloP

Ok.
Nel caso fosse una costante allora si può ottimizzare il codice.  ;)

nid69ita


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 ?

my name is IGOR, not AIGOR

nid69ita

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- qui le pinout delle varie schede by xxxPighi: Pinout
- qui una serie di link generali utili: Link Utili
my name is IGOR, not AIGOR

leo72

Qui chiudiamo, continua di là.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy