Ciao a tutti,
la questione è banale: sto usando la funzione map e vorrei sapere cosa accade quando il risultato matematico della sua espressione (presente anche sul sito) è un numero reale tipo 1.6.
MAP arrotonda per eccesso e quindi restituisce 2?
Io vorrei che restituisca sempre 1 finchè il risultato non diventa >2.
Quindi così: da 0 a 0.9 > 0. da 1 a 1.9 > 1. da 2 a 2.9 > 2 e così via
Se guardi il codice della map, lei utilizza numeri long, quindi tutti i decimali nel risultato sono troncati
Arduino.h e WMath.cpp
long map(long x, long in_min, long in_max, long out_min, long out_max)
{ return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
Infatti..........non parlo dei numeri in ingresso alla funzione, ma quello che restituisce!
In ingresso i miei numeri sono tutti int, ma il risultato matematico può essere anche un float!
Quindi, come ottenere ciò che vorrei?
cioè che quando il risultato è 1.5 in realtà vorrei che fosse 1, quando il risultato è 2.1 vorrei che fosse 2 ecc ecc
Non ci siamo capiti. Il risultato interno della funzione, eseguito su valori long, ti può dare un float concettualmente.
Ovviamente map restituisce un long, quindi fa il cast?
Premetto che non sono troppo pratico di questi aspetti del C/C++, ma secondo me non c'è nessun cast e nessuna conversione di tipo. L'unica operazione che può dare origine a un valore decimale è la divisione, ma questa viene eseguita tra due operandi il cui tipo è intero (long), quindi viene semplicemente eseguita una divisione intera, scartando il resto insomma.