Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    1

    valutazione di tanx con sviluppo di taylor

    Ciao a tutti, qualcuno mi può dare delle dritte? Devo trovare il valore della funzione tangente con angolo noto. Ho provato prima a farlo solo per cosx e mi viene:

    codice:
    #include <stdio.h>
    #include <math.h>
    
    float cosine(float, float);
    
    int main()
    {
    
    
        float ang,rad,acc;
    
        ang=10;
    
        rad=((ang*3.141592)/180);
        acc=4;
        printf("Programma per il calcolo del coseno di un angolo\n");
        printf("mediante sviluppo in serie di Taylor\n");
    
    
    
        printf("Il coseno di %f vale %f\n",ang,cosine(rad,acc));
    #ifdef DEBUG
        printf("Per confronto la funzione di libreria fornisce il valore %f\n",
               cos(rad));
    #endif
        system("PAUSE");
        return 0;
    }
    
    float cosine(float rad, float acc)
    {
        float previsto, corrente, x;
        int nfatt=1, sign=1;
        int n, nmax=120;
    
    
        previsto = 1;
        x = 1;
    
        for (n=1; n<nmax; n++)
        {
            nfatt = nfatt*(2*n)*(2*n-1);
            sign = sign*(-1);
            x = x*rad*rad;
            corrente = previsto + (sign*x)/nfatt;
            if ( fabs(previsto - corrente) < fabs(acc) ) return corrente;
            previsto  = corrente;
        }
    
        printf("Numero massimo di cicli superato\n");
        return corrente;
    }
    poi ho provato con senx, ma il risultato non so per quale motivo non viene:
    codice:
    #include <stdio.h>
    #include <math.h>
    
    
    float senine(float,float);
    
    int main()
    {
        float ang,rad,acc;
    
        ang=10;
    
        rad=((ang*3.141592)/180);
        acc=4;
    
        printf("Programma per il calcolo di sen(10)\n");
        printf("con sviluppo in serie di Taylor\n");
        printf("il seno di 10 vale %f\n",ang,senine(rad,acc));
    #ifdef DEBUG
        printf("Per confronto la funzione di libreria fornisce il valore %f\n",
               sen(ang));
    #endif
    
        system("PAUSE");
        return 0;
    }
    
    float senine(float rad, float acc)
    {
    
        float pre, cur, y, z;
        int fatt=1, segn=1;
        int m, ntot=70;
    
        pre = 1;
        y=1;
        z=1;
        for (m=1; m<ntot; m++)
        {
            fatt = fatt*(2*m+1)*(2*m);
            segn = segn*(-1);
            y=y*rad*rad;
            z=y*rad;
            cur = pre + (segn*z)/fatt;
            if ( fabs(pre - cur) < fabs(acc) ) return cur;
            pre = cur;
    
        }
    }
    per ultimo ho provato a d unirli per ricavare la tangente tramite senx/cosx....ma non so come implementare tan=senx/cosx:
    codice:
    #include <stdio.h>
    #include <math.h>
    
    float coseno(float,float);
    float seno(float,float);
    
    int main()
    {
        float ang,rad,acc,tan;
    
        ang=10;
        rad=((ang*3.141592)/180);
        acc=4;
        tan=(seno(rad,acc)/coseno(rad,acc));
        printf("Programma per il calcolo della tangente di 10 gradi sessagesimali\n");
        printf("mediante sviluppo in serie di Taylor\n");
    
    
        printf("la tangente di 10 vale %f\n",tan);
    
        system("PAUSE");
        return 0;
    }
    
    float coseno(float rad, float acc)
    {
        float prev, curr, x;
        int nfatt=1, sign=1;
        int n, nmax=70;
    
        prev = 1;
        x = 1;
    
        for (n=1; n<nmax; n++)
        {
            nfatt = nfatt*(2*n)*(2*n-1);
            sign = sign*(-1);
            x = x*rad*rad;
            curr = prev + (sign*x)/nfatt;
            if ( fabs(prev - curr) < fabs(acc) ) return curr;
            prev = curr;
        }
        printf("Numero massimo di cicli superato\n");
        return curr;
    }
    
    
    
    float seno(float rad, float acc)
    {
        float pre, cur, y, z;
        int fatt=1, segn=1;
        int m, ntot=70;
    
        pre = 1;
        y=1;
        z=1;
        for (m=1; m<ntot; m++)
        {
            fatt = fatt*(2*m+1)*(2*m);
            segn = segn*(-1);
            y=y*rad*rad;
            z=y*rad;
            cur = pre + (segn*z)/fatt;
            if ( fabs(pre - cur) < fabs(acc) ) return cur;
            pre = cur;
        }
        printf("Numero massimo di cicli superato\n");
        return cur;
    }
    mi potete aiutare??

  2. #2

    Moderazione

    Benvenuto sul forum! Ti ricordo che:
    • il codice va specificato tra tag [CODE] ... [/CODE], altrimenti perde l'indentazione;
    • il linguaggio di riferimento va sempre specificato (anche nel titolo, sotto forma di "tag").


    Ora correggo io (e mi sono permesso di sistemare l'indentazione, il codice era davvero poco leggibile), in futuro imposta correttamente la discussione fin da subito; nel frattempo ti consiglio di dare un'occhiata al regolamento.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.