PDA

Visualizza la versione completa : [C] problema con la funzione sqrt


ralph_solaris
13-05-2005, 22:03
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:



#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.
:dh: :dh:

unomichisiada
13-05-2005, 23:37
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:



#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.
:dh: :dh:
Potresti cominciare col dir CHE problemi....

floyd
14-05-2005, 11:00
dovrebbe ritornare un double
double risultato = sqrt(n);

ralph_solaris
14-05-2005, 15:01
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:
http://www.webalice.it/ralph_solaris/radice.png

Johnny_Depp
14-05-2005, 15:13
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 :bh:

Ikitt
14-05-2005, 18:05
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`:


gcc -o radice radice.c -lm

ralph_solaris
14-05-2005, 18:06
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);"



/* 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

ralph_solaris
14-05-2005, 18:46
Originariamente inviato da Ikitt
Errore in fase di linking, non di compilazione. Riesegui gcc cosi`:


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!

byaur
18-05-2005, 18:40
be normale che ci sia -lm...:dh: :dh:
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()... :D

:sonno:

kentaromiura
18-05-2005, 18:44
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; :dott:

Loading