Go Down

Topic: come trasformare un numero negativo in positivo, (Read 21821 times) previous topic - next topic

GINGARDU

Jul 29, 2012, 10:07 pm Last Edit: Jul 29, 2012, 10:09 pm by GINGARDU Reason: 1
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))

valvale

#1
Jul 29, 2012, 10:14 pm Last Edit: Jul 30, 2012, 10:54 pm by valvale97 Reason: 1

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

brunialti

#2
Jul 29, 2012, 10:38 pm Last Edit: Jul 29, 2012, 10:39 pm by brunialti Reason: 1
abs(-11); // da come risultato 11
abs(11);  // da come risultato 11


acik

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


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

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   =(

valvale


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*****  :smiley-sweat:

GINGARDU

#6
Jul 30, 2012, 12:44 pm Last Edit: Jul 30, 2012, 01:50 pm by GINGARDU Reason: 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   =(


hahah io credevo di dire una vera ca*****  :smiley-sweat:


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)   ]:D

leo72

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  ;)
Code: [Select]
#define abs(x) ((x)>0?(x):-(x))

brunialti

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

leo72


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

....fin dai tempi del vecchio BASIC ;)

acik


....fin dai tempi del vecchio BASIC ;)

Visti i nickname che girano, siamo in pochi a ricordarlo ...
AciK '74 :-)
Alex Limbeck

leo72



....fin dai tempi del vecchio BASIC ;)

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

+1  ;)


m_ri

#13
Jul 30, 2012, 11:56 pm Last Edit: Jul 31, 2012, 12:04 am by m_ri Reason: 1
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

m_ri

#14
Jul 31, 2012, 12:00 am Last Edit: Jul 31, 2012, 12:03 am by m_ri Reason: 1
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

Go Up