begin process at 2010 03 21 00:07:02
  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 :2 949

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 TRANSFORMER UN ENTIER EN DEUX NOMBRES COMPOSÉ DES MEMES CHIF... par thebroyeur
CALCULE LOG(X) par tagtog
Source avec Zip Source avec une capture ALGORITHME DE TRI D'UN TABLEAU PAR ORDRE CROISSANT OU DÉCROI... par Thuzhen
Source avec une capture CALCUL DE VARIANCE par Minilogus
Source avec une capture GÉNÉRATEUR DE CLÉS SUR 26 DIGITS AU FORMAT HEXADÉCIMAL par besilent

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...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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,593 sec (4)

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