Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C] problema con la funzione sqrt

    Salve!
    Ho iniziato da poco il C. Il mio problema è usare la funzione sqrt di <math.h> per calcolare la radice quadrata di una variabile:

    codice:
    #include <stdio.h>
    #include <math.h>
    
    main(){
    	int n;
    	n = 25;
    	int risultato;
    	risultato = sqrt(n);
    	
    	printf("%d\n",risultato);
    }
    Questo codice mi da dei problemi. Qualquno mi puo aiutare per favore.

  2. #2

    Re: [C] problema con la funzione sqrt

    Originariamente inviato da ralph_solaris
    Salve!
    Ho iniziato da poco il C. Il mio problema è usare la funzione sqrt di <math.h> per calcolare la radice quadrata di una variabile:

    codice:
    #include <stdio.h>
    #include <math.h>
    
    main(){
    	int n;
    	n = 25;
    	int risultato;
    	risultato = sqrt(n);
    	
    	printf("%d\n",risultato);
    }
    Questo codice mi da dei problemi. Qualquno mi puo aiutare
    per favore.
    Potresti cominciare col dir CHE problemi....
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    dovrebbe ritornare un double
    double risultato = sqrt(n);

  4. #4
    Grazie delle vostre risposte.
    Ho provato con il double ma mi da il stesso problema. Credo che ci sia un problema diverso del codice errato ... ma non so cosa sia.
    Ecco l'errore che mi da in fase di compilazione:

  5. #5
    gcc ti dice che non trova i riferimenti alla funzione sqrt()
    strano! perchè <math.h> appartiene alla libreria standard ANSI C

    prova a ravanare all'interno di /usr/include/math.h e vedi se è definita la funzione sqrt()

    http://www.cplusplus.com/ref/cmath/sqrt.html
    ...Terrible warlords, good warlords, and an english song

  6. #6
    Originariamente inviato da ralph_solaris
    Ecco l'errore che mi da in fase di compilazione:
    Errore in fase di linking, non di compilazione. Riesegui gcc cosi`:
    codice:
    gcc -o radice radice.c -lm
    "Qualsiasi esperto ha paura di combattere usando la katana vera. Anch'io. Ma non ignoro la mia paura, riesco ad accettarla, e a metterla da parte accanto a me".

  7. #7
    Sono andato a vedere <math.h>, e non so dire se è definito la funzione sqrt visto che sono ancora un novelino. Ho fatto la ricerca della parola sqrt nel file e ecco qui i pezzi di codice che la contiene. Pero quello che non capisco è che se invece di passare una variabile "n" a la funzione sqrt lo passo "25" allora funziona:

    ---> "double risultato = sqrt(25);"

    codice:
    /* Some useful constants.  */
    #if defined __USE_BSD || defined __USE_XOPEN
    # define M_E		2.7182818284590452354	/* e */
    # define M_LOG2E	1.4426950408889634074	/* log_2 e */
    # define M_LOG10E	0.43429448190325182765	/* log_10 e */
    # define M_LN2		0.69314718055994530942	/* log_e 2 */
    # define M_LN10		2.30258509299404568402	/* log_e 10 */
    # define M_PI		3.14159265358979323846	/* pi */
    # define M_PI_2		1.57079632679489661923	/* pi/2 */
    # define M_PI_4		0.78539816339744830962	/* pi/4 */
    # define M_1_PI		0.31830988618379067154	/* 1/pi */
    # define M_2_PI		0.63661977236758134308	/* 2/pi */
    # define M_2_SQRTPI	1.12837916709551257390	/* 2/sqrt(pi) */
    # define M_SQRT2	1.41421356237309504880	/* sqrt(2) */
    # define M_SQRT1_2	0.70710678118654752440	/* 1/sqrt(2) */
    #endif
    
    
    /* The above constants are not adequate for computation using `long double's.
       Therefore we provide as an extension constants with similar names as a
       GNU extension.  Provide enough digits for the 128-bit IEEE quad.  */
    #ifdef __USE_GNU
    # define M_El		2.7182818284590452353602874713526625L  /* e */
    # define M_LOG2El	1.4426950408889634073599246810018921L  /* log_2 e */
    # define M_LOG10El	0.4342944819032518276511289189166051L  /* log_10 e */
    # define M_LN2l		0.6931471805599453094172321214581766L  /* log_e 2 */
    # define M_LN10l	2.3025850929940456840179914546843642L  /* log_e 10 */
    # define M_PIl		3.1415926535897932384626433832795029L  /* pi */
    # define M_PI_2l	1.5707963267948966192313216916397514L  /* pi/2 */
    # define M_PI_4l	0.7853981633974483096156608458198757L  /* pi/4 */
    # define M_1_PIl	0.3183098861837906715377675267450287L  /* 1/pi */
    # define M_2_PIl	0.6366197723675813430755350534900574L  /* 2/pi */
    # define M_2_SQRTPIl	1.1283791670955125738961589031215452L  /* 2/sqrt(pi) */
    # define M_SQRT2l	1.4142135623730950488016887242096981L  /* sqrt(2) */
    # define M_SQRT1_2l	0.7071067811865475244008443621048490L  /* 1/sqrt(2) */
    #endif

  8. #8
    Originariamente inviato da Ikitt
    Errore in fase di linking, non di compilazione. Riesegui gcc cosi`:
    codice:
    gcc -o radice radice.c -lm
    SI effetivamente funziona adesso. Grazie a tutti.
    Pero adesso mi chiede cose' questo errore in linking.
    Riuscite a spiegarmi? inoltre come faccio a compilare senza -lm senza che mi dia problemi?

    Grazie ancora!

  9. #9
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    be è normale che ci sia -lm...
    questo parametro dice al compilatore gcc di includere le funzioni della libreria matematica math.h...
    ci deve essere per forza che sappia io non esiste un metodo per disfarsene e usare le funzioni di math.h...
    forse fai prima a farti una funzione che ti calcola la radice quadrata senza usare sqrt()...

    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  10. #10
    Originariamente inviato da ralph_solaris
    Sono andato a vedere <math.h>, e non so dire se è definito la funzione sqrt visto che sono ancora un novelino. Ho fatto la ricerca della parola sqrt nel file e ecco qui i pezzi di codice che la contiene. Pero quello che non capisco è che se invece di passare una variabile "n" a la funzione sqrt lo passo "25" allora funziona:
    prova a castare n in double
    (double)n

    oppure scrivere
    double n=25.00;

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.