begin process at 2012 02 09 08:57:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > APPROXIMATION DU SIN, COS, TAN, ACOS...

APPROXIMATION DU SIN, COS, TAN, ACOS...


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Niveau :Débutant Date de création :09/07/2003 Date de mise à jour :09/07/2003 17:05:54 Vu :4 143

Auteur : psy4meuh

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voilà,

c'est des méthodes de ma classe Math, qui calculent les fonctions trigo de facon approximative... mais pas tant que ca, celà suffit dans bien des cas.... en plus très rapide comparé aux fonctions standar...



Source

  • //----------------------------------------------------------------------
  • Real Math::FastSin0 (Real fAngle)
  • {
  • Real fASqr = fAngle*fAngle;
  • Real fResult = 7.61e-03f;
  • fResult *= fASqr;
  • fResult -= 1.6605e-01f;
  • fResult *= fASqr;
  • fResult += 1.0f;
  • fResult *= fAngle;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastSin1 (Real fAngle)
  • {
  • Real fASqr = fAngle*fAngle;
  • Real fResult = -2.39e-08f;
  • fResult *= fASqr;
  • fResult += 2.7526e-06f;
  • fResult *= fASqr;
  • fResult -= 1.98409e-04f;
  • fResult *= fASqr;
  • fResult += 8.3333315e-03f;
  • fResult *= fASqr;
  • fResult -= 1.666666664e-01f;
  • fResult *= fASqr;
  • fResult += 1.0f;
  • fResult *= fAngle;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastCos0 (Real fAngle)
  • {
  • Real fASqr = fAngle*fAngle;
  • Real fResult = 3.705e-02f;
  • fResult *= fASqr;
  • fResult -= 4.967e-01f;
  • fResult *= fASqr;
  • fResult += 1.0f;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastCos1 (Real fAngle)
  • {
  • Real fASqr = fAngle*fAngle;
  • Real fResult = -2.605e-07f;
  • fResult *= fASqr;
  • fResult += 2.47609e-05f;
  • fResult *= fASqr;
  • fResult -= 1.3888397e-03f;
  • fResult *= fASqr;
  • fResult += 4.16666418e-02f;
  • fResult *= fASqr;
  • fResult -= 4.999999963e-01f;
  • fResult *= fASqr;
  • fResult += 1.0f;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastTan0 (Real fAngle)
  • {
  • Real fASqr = fAngle*fAngle;
  • Real fResult = 2.033e-01f;
  • fResult *= fASqr;
  • fResult += 3.1755e-01f;
  • fResult *= fASqr;
  • fResult += 1.0f;
  • fResult *= fAngle;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastTan1 (Real fAngle)
  • {
  • Real fASqr = fAngle*fAngle;
  • Real fResult = 9.5168091e-03f;
  • fResult *= fASqr;
  • fResult += 2.900525e-03f;
  • fResult *= fASqr;
  • fResult += 2.45650893e-02f;
  • fResult *= fASqr;
  • fResult += 5.33740603e-02f;
  • fResult *= fASqr;
  • fResult += 1.333923995e-01f;
  • fResult *= fASqr;
  • fResult += 3.333314036e-01f;
  • fResult *= fASqr;
  • fResult += 1.0f;
  • fResult *= fAngle;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastInvSin (Real fValue)
  • {
  • Real fRoot = Math::Sqrt(1.0f-fValue);
  • Real fResult = -0.0187293f;
  • fResult *= fValue;
  • fResult += 0.0742610f;
  • fResult *= fValue;
  • fResult -= 0.2121144f;
  • fResult *= fValue;
  • fResult += 1.5707288f;
  • fResult = HALF_PI - fRoot*fResult;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastInvCos (Real fValue)
  • {
  • Real fRoot = Math::Sqrt(1.0f-fValue);
  • Real fResult = -0.0187293f;
  • fResult *= fValue;
  • fResult += 0.0742610f;
  • fResult *= fValue;
  • fResult -= 0.2121144f;
  • fResult *= fValue;
  • fResult += 1.5707288f;
  • fResult *= fRoot;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastInvTan0 (Real fValue)
  • {
  • Real fVSqr = fValue*fValue;
  • Real fResult = 0.0208351f;
  • fResult *= fVSqr;
  • fResult -= 0.085133f;
  • fResult *= fVSqr;
  • fResult += 0.180141f;
  • fResult *= fVSqr;
  • fResult -= 0.3302995f;
  • fResult *= fVSqr;
  • fResult += 0.999866f;
  • fResult *= fValue;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
  • Real Math::FastInvTan1 (Real fValue)
  • {
  • Real fVSqr = fValue*fValue;
  • Real fResult = 0.0028662257f;
  • fResult *= fVSqr;
  • fResult -= 0.0161657367f;
  • fResult *= fVSqr;
  • fResult += 0.0429096138f;
  • fResult *= fVSqr;
  • fResult -= 0.0752896400f;
  • fResult *= fVSqr;
  • fResult += 0.1065626393f;
  • fResult *= fVSqr;
  • fResult -= 0.1420889944f;
  • fResult *= fVSqr;
  • fResult += 0.1999355085f;
  • fResult *= fVSqr;
  • fResult -= 0.3333314528f;
  • fResult *= fVSqr;
  • fResult += 1.0f;
  • fResult *= fValue;
  • return fResult;
  • }
  • //----------------------------------------------------------------------
//----------------------------------------------------------------------
Real Math::FastSin0 (Real fAngle)
{
    Real fASqr = fAngle*fAngle;
    Real fResult = 7.61e-03f;
    fResult *= fASqr;
    fResult -= 1.6605e-01f;
    fResult *= fASqr;
    fResult += 1.0f;
    fResult *= fAngle;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastSin1 (Real fAngle)
{
    Real fASqr = fAngle*fAngle;
    Real fResult = -2.39e-08f;
    fResult *= fASqr;
    fResult += 2.7526e-06f;
    fResult *= fASqr;
    fResult -= 1.98409e-04f;
    fResult *= fASqr;
    fResult += 8.3333315e-03f;
    fResult *= fASqr;
    fResult -= 1.666666664e-01f;
    fResult *= fASqr;
    fResult += 1.0f;
    fResult *= fAngle;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastCos0 (Real fAngle)
{
    Real fASqr = fAngle*fAngle;
    Real fResult = 3.705e-02f;
    fResult *= fASqr;
    fResult -= 4.967e-01f;
    fResult *= fASqr;
    fResult += 1.0f;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastCos1 (Real fAngle)
{
    Real fASqr = fAngle*fAngle;
    Real fResult = -2.605e-07f;
    fResult *= fASqr;
    fResult += 2.47609e-05f;
    fResult *= fASqr;
    fResult -= 1.3888397e-03f;
    fResult *= fASqr;
    fResult += 4.16666418e-02f;
    fResult *= fASqr;
    fResult -= 4.999999963e-01f;
    fResult *= fASqr;
    fResult += 1.0f;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastTan0 (Real fAngle)
{
    Real fASqr = fAngle*fAngle;
    Real fResult = 2.033e-01f;
    fResult *= fASqr;
    fResult += 3.1755e-01f;
    fResult *= fASqr;
    fResult += 1.0f;
    fResult *= fAngle;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastTan1 (Real fAngle)
{
    Real fASqr = fAngle*fAngle;
    Real fResult = 9.5168091e-03f;
    fResult *= fASqr;
    fResult += 2.900525e-03f;
    fResult *= fASqr;
    fResult += 2.45650893e-02f;
    fResult *= fASqr;
    fResult += 5.33740603e-02f;
    fResult *= fASqr;
    fResult += 1.333923995e-01f;
    fResult *= fASqr;
    fResult += 3.333314036e-01f;
    fResult *= fASqr;
    fResult += 1.0f;
    fResult *= fAngle;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastInvSin (Real fValue)
{
    Real fRoot = Math::Sqrt(1.0f-fValue);
    Real fResult = -0.0187293f;
    fResult *= fValue;
    fResult += 0.0742610f;
    fResult *= fValue;
    fResult -= 0.2121144f;
    fResult *= fValue;
    fResult += 1.5707288f;
    fResult = HALF_PI - fRoot*fResult;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastInvCos (Real fValue)
{
    Real fRoot = Math::Sqrt(1.0f-fValue);
    Real fResult = -0.0187293f;
    fResult *= fValue;
    fResult += 0.0742610f;
    fResult *= fValue;
    fResult -= 0.2121144f;
    fResult *= fValue;
    fResult += 1.5707288f;
    fResult *= fRoot;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastInvTan0 (Real fValue)
{
    Real fVSqr = fValue*fValue;
    Real fResult = 0.0208351f;
    fResult *= fVSqr;
    fResult -= 0.085133f;
    fResult *= fVSqr;
    fResult += 0.180141f;
    fResult *= fVSqr;
    fResult -= 0.3302995f;
    fResult *= fVSqr;
    fResult += 0.999866f;
    fResult *= fValue;
    return fResult;
}
//----------------------------------------------------------------------
Real Math::FastInvTan1 (Real fValue)
{
    Real fVSqr = fValue*fValue;
    Real fResult = 0.0028662257f;
    fResult *= fVSqr;
    fResult -= 0.0161657367f;
    fResult *= fVSqr;
    fResult += 0.0429096138f;
    fResult *= fVSqr;
    fResult -= 0.0752896400f;
    fResult *= fVSqr;
    fResult += 0.1065626393f;
    fResult *= fVSqr;
    fResult -= 0.1420889944f;
    fResult *= fVSqr;
    fResult += 0.1999355085f;
    fResult *= fVSqr;
    fResult -= 0.3333314528f;
    fResult *= fVSqr;
    fResult += 1.0f;
    fResult *= fValue;
    return fResult;
}
//----------------------------------------------------------------------


 Conclusion

Merci à Wild-Magic ;-)


 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

Commentaires et avis

Commentaire de Maegis le 14/07/2003 14:04:45

2 - 3 commentaires seraient les bienvenus

Commentaire de psy4meuh le 15/07/2003 07:17:28

en fait Wild Magic a dévelopé un prog d'analyse de courbe, et à partir des courbes de fonctions Cos, Sin, etc... on a des formules du genre :
x²+1589/255*x²+65887/155124*1-x²+258744/899... c'est de l'aproximation, (pas tres au point fô dire , mais une fois un peupris, on a des formules qui tiennent la route.
On retranscri ca en code C assez rapide et on obtient des fonction plus rapides que les standard, et qui donnent un resultat largement sufisent dans la plupart des cas...
Mais le code est compréhensible non?

Commentaire de Maegis le 16/07/2003 11:52:46

Il aurait pu quand même expliquer le fonctionement parce que la il balance les chiffres comme ça. J'avais pas pigé que c'était une aproximation  à partir des courbes

Commentaire de drpark le 18/12/2004 17:52:03

hello, j'ai fait un test de rapidité,
et c kifkif avec les fonctions standarts...

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales