Funzioni trigonometriche in C

fransis2
ciao a tutti. Volevo sapere in quale libreria sono definite e qual è il nome della chiamata delle funzioni trigonometriche. Grazie mille!!

Risposte
Luc@s
double exp(double x);
    exponential of x
double log(double x);
    natural logarithm of x
double log10(double x);
    base-10 logarithm of x
double pow(double x, double y);
    x raised to power y
double sqrt(double x);
    square root of x
double ceil(double x);
    smallest integer not less than x
double floor(double x);
    largest integer not greater than x
double fabs(double x);
    absolute value of x
double ldexp(double x, int n);
    x times 2 to the power n
double frexp(double x, int* exp);
    if x non-zero, returns value, with absolute value in interval [1/2, 1), and assigns to *exp integer such that product of return value and 2 raised to the power *exp equals x; if x zero, both return value and *exp are zero
double modf(double x, double* ip);
    returns fractional part and assigns to *ip integral part of x, both with same sign as x
double fmod(double x, double y);
    if y non-zero, floating-point remainder of x/y, with same sign as x; if y zero, result is implementation-defined
double sin(double x);
    sine of x
double cos(double x);
    cosine of x
double tan(double x);
    tangent of x
double asin(double x);
    arc-sine of x
double acos(double x);
    arc-cosine of x
double atan(double x);
    arc-tangent of x
double atan2(double y, double x);
    arc-tangent of y/x
double sinh(double x);
    hyperbolic sine of x
double cosh(double x);
    hyperbolic cosine of x
double tanh(double x);
    hyperbolic tangent of x

fransis2
perchè, allora, se lancio questo programma
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
FILE *stream;
int main(){
    double a[90]; int i=0;
    for (i=0; i<90; i++) {a[i]=cos(i); printf("%d\n", a[i]);}
    scanf("%d", &a);
}

[/quote]
mi esce un output del tipo:
0
263521932
1465086469
-1098521134
...
eccetera eccetera (altra roba che sembra che non c'entra niente...)

Luc@s
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

FILE *stream; // dove lo usi?

int main()
{
    double a[90]; 
    int i=0;
    for (i=0; i<90; i++) 
   {
     a[i]=cos(i); 
     printf("%d\n", a[i]);
   }
   return 0;
}


Te lo stampa così perche a livello macchina le frazioni non "esistono" ma sono approssimate floating point...

fransis2
ma non mi sembra una buona approssimazione: i valori del coseno sono compresi tra 0 e 1 mentre questi valori sono dell'ordine di 10^9.
(il file *stream lo avevo usato per fare una cosa prima che poi ho cancellato...)

Luc@s
sembra quasi non ti inizializzi i valori e ti metta valori random...

Guglielmo4
Ciao Fransis2,

ho provato a far girare il tuo programmino e mi sono accorto di due cose:
Nella printf dovresti probabilmente passare %f (o %g) anzichè %d per via del fatto che la funzione cos torna double e non int.
Poi guardando la documentazione della funzione cos si legge che l'argomento è espresso in radianti e non gradi.
Ho provato a modificarlo e ottengo risultati che sembrano giusti:

#include
#include
#include

#define PI 3.14159265358979323846264338
int main(){
double a[90]; int i=0; double step=PI/180.0; double j=0.0;
for (i=0; i<90; i++) {a=cos(j); printf("%g\n", a); j+=step;}
scanf("%d", &a);
}

sul mio visual stidio genera una cosa tipo:

1
0.999848
0.999391
0.99863
0.997564
0.996195
0.994522
0.992546
0.990268
0.987688
0.984808

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.