Condividi:        

Funzione segno nel linguaggio C

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Anthony47, Triumph Of Steel, archimede

Funzione segno nel linguaggio C

Postdi ale83_webmaster » 17/02/06 19:32

Ciao,
mi servirebbe abbastanza urgentemente di sapere qual è la sintassi della funzione segno nel linguaggio C (ammesso che ci sia, perché nel math.h non l'ho trovata), cioè la funzione sgn(x) che ti dice se x è positivo o negativo, con x numero reale.
Grazie mille!
ale83_webmaster
Avatar utente
ale83_webmaster
Utente Senior
 
Post: 390
Iscritto il: 25/01/03 21:18
Località: Casagiove

Sponsor
 

Postdi GAD » 17/02/06 20:30

Non puoi usare semplicemente maggiore e minore di zero visto che sono gli operatori standard e sono pure piu' veloci di qualsiasi funzione? numero>0 numero<0
Quando l'ultimo albero sarà abbattuto,l'ultimo pesce catturato,l'ultimo fiume avvelenato,
soltanto allora gli uomini si accorgeranno chei soldi non possono essere mangiati
GAD
Moderatore
 
Post: 2184
Iscritto il: 22/09/02 14:36
Località: Nebbiosa

Postdi ale83_webmaster » 17/02/06 21:50

Nel mio programma devo confrontare i segni di due numeri reali (se sono uguali o diversi) e sul libro di teoria (sto facendo ciò per un esame all'università) c'è scritto espressamente di confrontare i segni, invece di vedere se il prodotto dei due numeri è positivo o negativo, perché altrimenti si farebbe una moltiplicazione inutile che potrebbe causare anche un underflow o un overflow.

Comunque, fatemi sapere se esiste una funzione già inclusa nel linguaggio C; nel caso che non ci fosse, mi sono creato da me la funzione.
Credo sia corretta, no?
Codice: Seleziona tutto
int sgn(float x)
  {
   int segno;

   if (x<0.)
     {
      segno=-1;
     }
   else if (x==0.)
          {
           segno=0;
          }
        else
          {
           segno=1;
          }

   return segno;
  }
ale83_webmaster
Avatar utente
ale83_webmaster
Utente Senior
 
Post: 390
Iscritto il: 25/01/03 21:18
Località: Casagiove

Postdi steej » 17/02/06 23:06

non sono un gran programmatore ...
però potresti definire il segno come
Codice: Seleziona tutto
segno = x/abs(x)

sempre che abs() esista!
powered by Ubuntu - Linux
steej
Utente Junior
 
Post: 21
Iscritto il: 24/12/04 11:47

Postdi disgrazia » 19/02/06 23:25

Io userei la stessa tecnica di ale, però con una macro:

Codice: Seleziona tutto
#define SGN(x)  ( ((x) < 0) ?  -1 : ( ((x) == 0 ) ? 0 : 1) )


che funziona con float, double, interi & c., e ti evita anche di fare una chiamata di funzione.

la funzione valore assoluto esiste in math.h e si chiama fabs(), comunque eviterei la formula di steej perché è leggermente più pesante (richiede una divisione) e perché comunque andrebbe gestito a parte il caso x==0 per cui x/abs(x) non è definita e all'atto pratico generebbe un errore di divisione per zero.

Poi vabbè, a meno che non dobbiate fare programmi pesantissimi potete anche fregarvene di tutte queste paranoie sulla complessità computazionale ;)
disgrazia
Download Admin
 
Post: 708
Iscritto il: 08/07/02 22:16


Torna a Programmazione


Topic correlati a "Funzione segno nel linguaggio C":


Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti