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

    [C++] funzione sin() torna un risultato>1

    Salve a tutti ho trovato un problema che mi sta mandando in pappa, sto cercando errori simili da una buona oretta su internet ma a quanto pare nessuno ne ha scritto.
    Sto scrivendo una classe che gestisca i numeri complessi e per l'esponenziale ho bisogno delle funzioni seno e coseno: questo è il codice di quel metodo
    codice:
    Complex Complex::exponentiation(const int &exponent) const
    {
        //c^n = norm^n *(cos(n*fi)+ i sin(n*fi) ) <- questa è la formula
    
    //this->norm() torna la norma del numero complesso
    //ovvero sqrt(reale^2 + img^2)
        double normTo_n = pow(this->norm(),exponent);
        double newReal = cos(exponent*this->angleRadians())*normTo_n;
        //double newImg = sin(exponent*this->angleRadians())*normTo_n; //<-diventava 1.22
    
        double a = this->angleRadians();
        double fi = exponent*a;
        double seno = sin(fi);
        double newImg = seno*normTo_n;
        double pi = (2.0*asin(1.0));
        double senoDipi = sin(pi);
    //<- qui ho messo lo step del debug
        return Complex(newReal, newImg);
    }
    
    //newReal e newImg sono i nuovi valori da assegnare alle componenti reale ed immaginaria di Complex
    So che non ho bisogno di tutte queste variabili, le ho inserite solo perchè elevando (0+i) al quadrato la funzione non tornava -1+0i ma un risultato sbagliato, così ho distinto tutte le operazioni possibili ed ho eseguito il debug, ebbenne ho scoperto che il seno di pigreco torna 1.2!!
    A parte il fatto che dovrebbe tornare 0, il risultato è maggiore di 1, quindi è doppiamente sbagliato!
    Questi sono i risultati del debug facendo entrare:
    Complex c= 0+i1;
    exponent = 2;
    codice:
    Name    | Value   | Type
    a           1.570     double
    exponent 2           int
    fi           3.141     double
    newImg  1.224      double
    newReal  -1         double
    normTo_n 1          double
    pi          3.141      double
    seno      1.2246    double
    senoDipi  1.2246   double
    Non so che fare.. io non penso di aver fatto errori di sintassi, i valori calcolati sono tutti esatti [il complesso 0+i infatti ha un angolo di 90°, che moltiplicato per l'esponente (2) fa 180° che in radianti è piGreco (3.14)]
    è proprio che il sin(piGreco) torna 1.22eccetera.
    Vi è mai capitato?
    Mi tocca riscrivere la funzione seno?
    Consigli?
    Magari qualcuno se lo può incollare sul proprio compilatore e dirmi se da lo stesso risultato?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non so come tu abbia visualizzato i valori ma il risultato corretto del seno è

    1.22465e-016

    che è molto vicino a zero, come dovrebbe essere ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    scusate -.-' mi sono accorto solo ora che era *10^-16 chiudete pure grazie
    Era impossibile che una funzione standard contenesse un errore simile :-)

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 © 2025 vBulletin Solutions, Inc. All rights reserved.