Go Down

Topic: Soucis de calcul pour transformer heure en seconde (Read 1 time) previous topic - next topic

Stef84

Jul 10, 2011, 04:47 pm Last Edit: Jul 10, 2011, 04:51 pm by Stef84 Reason: 1
Bonsoir,
Le problème est qu il me sort un résultat négatif

lorsque je faits : heure*60 j ai le bon résultat mais pas quand je faits heure*3600 je me retrouve en négatif

en gros c est :
int current;

current = (heure()*3600)+(minute()*60)+second();

pourtant ca a fonctionné à un moment

quelqu un aurait une idée ?

Stef84

resolu par :

long current;
et
current = (((long)hour())*3600) + ((long)minute()*60) + (long)second();

zoroastre

Yep!

Comme tes chiffres seront toujours positifs, tu peux optimiser l'utilisation de la mémoire en occultant les nombres négatifs avec unsigned.

Code: [Select]
unsigned long _hour = hour()*3600;
unsigned long _minute = minute()*60;
unsigned long _seconde = second(): // faut voir si tu peux additionner un [i]int[/i] et un [i]long[/i] ???
unsigned long current = _hour + _minute + _seconde;


par exemple ;)

@+

Zoroastre.
Gné! ;)

skywodd

Bonjour,
Pour optimiser encore plus l'utilisation de mémoire:
long current = (((long)hour())*3600) + ((long)minute()*60) + (long)second(); -> 16 bytes
unsigned  long current = (((unsigned  long)hour())*3600) + ((unsigned  long)minute()*60) + (unsigned  long)second(); -> 16 bytes (aucune optimisation)

Extrait de la libraire Time (je m'avance mais je pense que ces de cette libraire que tu sort c'est fonction ?)
Quote

hour();            // the hour now  (0-23)
minute();          // the minute now (0-59)
second();          // the second now (0-59)


Je pense qu'un truc dans ce genre devrait marcher :
unsigned long current = (((word)hour())*3600) + ((word)minute()*60) + (word)second(); -> 9 bytes
voir peut être mais pas sur que ça marche :
unsigned long current = (((byte)hour())*3600) + ((byte)minute()*60) + (byte)second(); -> 7 bytes
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

zoroastre

Yep!

Exact skywodd :smiley-mr-green:

Je me suis encore fait avoir par un vieux travers  :%

Finalement, la valeur maximale est de 86399 (23h 59m 59s).

@+

Zoroastre.
Gné! ;)

Go Up