come trasformare un numero negativo in positivo,

e un ora che sto cercando di trovare il sistema per trasformare un numero negativo in positivo
es -11 in 11

ovviamente il numero non e sempre fisso (variabile da map(analogRead))

GINGARDU:
e un ora che sto cercando di trovare il sistema per trasformare un numero negativo in positivo
es -11 in 11

ovviamente il numero non e sempre fisso (variabile da map(analogRead))

può sembrare una cavolata ma prova moltiplicando per -1 :slight_smile:

abs(-11); // da come risultato 11
abs(11); // da come risultato 11

Moltiplica il numero per se stesso (potenza)
E poi fanne la radice quadrata !

Oppure fai if numero < 0 {numero = numero * -1}

siete dei grandi 8) funziona sia abs che moltiplicare per -1

poi provo anche la radice quadrata per curiosita

mi sa che devo tornare a scuola povero me =(

GINGARDU:
siete dei grandi 8) funziona sia abs che moltiplicare per -1

poi provo anche la radice quadrata per curiosita

mi sa che devo tornare a scuola povero me =(

hahah io credevo di dire una vera ca***** :sweat_smile:

valvale97:

GINGARDU:
siete dei grandi 8) funziona sia abs che moltiplicare per -1

poi provo anche la radice quadrata per curiosita

mi sa che devo tornare a scuola povero me =(

hahah io credevo di dire una vera ca***** :sweat_smile:

tutti i sistemi indicati funzionano tutti anche la radice quadrata del numero negativo moltiplicato per se stesso,

azz...... anche le espressioni studiate a scuola hanno la loro utilità (da non credere) ]:smiley:

Eviterei le radici quadrate per la complessità che introducono nei calcoli. Anche la moltiplicazione per -1 è inutilmente dispendiosa.
Usate Abs, come suggerito, che è una semplicissa macro che cambia di segno in caso di numero negativo :wink:

#define abs(x) ((x)>0?(x):-(x))

... tanto più che è gia standard in arduino e non bisogna riscriverla.
del resto in nomen omen: abs sta per "absolute value" ....

brunialti:
del resto in nomen omen: abs sta per "absolute value" ....

....fin dai tempi del vecchio BASIC :wink:

leo72:
....fin dai tempi del vecchio BASIC :wink:

Visti i nickname che girano, siamo in pochi a ricordarlo ...
AciK '74 :slight_smile:

acik:

leo72:
....fin dai tempi del vecchio BASIC :wink:

Visti i nickname che girano, siamo in pochi a ricordarlo ...
AciK '74 :slight_smile:

+1 :wink:

+x

piccolo dettaglio: se hai un short e gli passi -128,o se hai un int e gli passi -32678(i valori limite dei due tipi),l'abs probab ti restituirà -128 e -32678..motivo:range short -128,127 range int -32678,+32767

se ti da problemi il fatto che abs ti possa tornare valori negativi,potresti fare una cosa del tipo:

if(abs(a)==a && !a){return houston,we have a problem}
return abs(a);

oppure

abs(a+1)-1
ovviamente,devi scrivere a+1 e NON a++ o ++a

m_ri:
piccolo dettaglio: se hai un short e gli passi -128,o se hai un int e gli passi -32678(i valori limite dei due tipi),l'abs probab ti restituirà -128 e -32678..motivo:range short -128,127 range int -32678,+32767

questo è un problema un po fasullo perche di solito con arduino bisogna sempre vedere il risultato finale,

se un progetto funziona benissimo e ci sta "comodamente" nella memoria non vedo il motivo perche bisogna a tutti i costi "ottimizzare" o cambiare un float con un int per risparmiare qualche "briciola" quando ancoraa hai 10k di memoria vuota,

al momento la vedo cosi (poi magari mi sbaglio)

dipende dal progetto..alcune volte sta cosa può essere un problema,altre volte no..dicevo solo xkè uno raramente non pensa ai casi limite,ma alcune volte potrebbero uscire fuori ste cose..

GINGARDU:
se un progetto funziona benissimo e ci sta "comodamente" nella memoria non vedo il motivo perche bisogna a tutti i costi "ottimizzare" o cambiare un float con un int per risparmiare qualche "briciola" quando ancoraa hai 10k di memoria vuota,

Non sta così.
Nelle architetture Harward come gli atmel la memoria Flash del codice è separata dalla memoria Ram dove vengono create le variabili. Per cui i 10 kB di Flash liberi non c'entrano nulla con la Ram ancora disponibile. Puoi saturare la Ram anche con un programma di pochi kB, basta creare un array di 1000 int (2 byte cad.) per mandare in tilt il microcontrollore.

poi solitamente passare da float a int non è un'ottimizzazione,ma proprio un cambio di design del programma..

leo72:

acik:

leo72:
....fin dai tempi del vecchio BASIC :wink:

Visti i nickname che girano, siamo in pochi a ricordarlo ...
AciK '74 :slight_smile:

+1 :wink:

Leo ti sei tolto un'anno?
Dovevi scrivere +2 :grin: :grin: :grin: