IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Arc-tangentes, Taylor et les lang. de prog.


Sujet :

Algorithmes et structures de données

  1. #1
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut Arc-tangentes, Taylor et les lang. de prog.
    Bonjour,

    Je voudrais savoir quelle est généralement la méthode utilisée pour le calcul d'arc-tangentes (généralement nommée atan) dans les différentes librairies mathématiques standart (c, c++, c#, java, etc).

    Je suppose que c'est un développement en série de Taylor, non ?

    Si tel est le cas quelle est la précision utilisée en général ?

    D'autre part, est-ce que ça vaut la peine de se faire sa propre méthode de développement en série de Taylor (dans le cas d'applications temps-réel) pour pouvoir gérer soi-même la précision (et donc la rapidité d'exécution) ou est-ce que le fameux atan est vraiment optimisé ?

    (A noter que je ne veux pas utiliser de tables pré-calculées )

    Merci.

    Flo.

  2. #2
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Les bibliothèques externes mathématiques sont trés performantes et permettent une grande précision par rapport aux implémentations standard.
    (A noter que je ne veux pas utiliser de tables pré-calculées )
    La méta-programmation est un bon compromis alors.

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Flo.
    Je voudrais savoir quelle est généralement la méthode utilisée pour le calcul d'arc-tangentes (généralement nommée atan) dans les différentes librairies mathématiques standart (c, c++, c#, java, etc).
    Les trois techniques que je connais sont:
    - utilisation d'une instruction du processeur,
    - utilisation de CORDIC,
    - décomposition en sous domaine et utilisation de polynomes convenablement choisis dans chacun de ces sous-domaines; parfois il s'agit de développement en série, parfois ils sont choisis autrement.
    - tables et interpolation (c'est un cas particulier du précédent).

    Si tel est le cas quelle est la précision utilisée en général ?
    Normalement moins d'1ULP, arriver à 1/2ULP (comme on fait pour des opérations plus simples) est quasiment impossible avec les fonctions transcendantes.

    D'autre part, est-ce que ça vaut la peine de se faire sa propre méthode de développement en série de Taylor (dans le cas d'applications temps-réel) pour pouvoir gérer soi-même la précision (et donc la rapidité d'exécution) ou est-ce que le fameux atan est vraiment optimisé ?
    Si ton objectif est un compromis rapidité/précision, il est possible que tu puisses optenir un qui te convient le mieux. Le seul moyen de savoir est de mesurer.

  4. #4
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut
    Salut,

    merci pour vos réponses.

    - utilisation d'une instruction du processeur,
    oui mais la question tient toujours (même au niveau du processeur) ... ... le résultat ne leur tombe pas du ciel !!!

    OK pour CORDIC. Je connaissais pas. Merci.

    Que représente 1 ULP ?

    Merci.

    Flo.

    Edit: pour CORDIC, j'ai lu cet article :

    http://orochoir.club.fr/Maths/cordic.htm

    Ils disent que c'est pour les fonctions trigonométriques, mauis est-ce que cela marche également pour les fonctions réciproques ?

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Flo.
    oui mais la question tient toujours (même au niveau du processeur) ... ... le résultat ne leur tombe pas du ciel !!!
    Une des methodes qui suivent.

    Que représente 1 ULP ?
    Units in the Last Place. C'est la mesure classique de la precision. Il faut 1/2ULP pour que le bit le moins significatif soit correct (c'est pas possible de descendre en dessous).

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    Personnelement j'avais utilisé des valeurs tabulées et, à partir de la valeur tabulée la plus proche, utilisé le développement de taylor.
    Je me suis toujours limité à 1 developpement du 3eme ordre.
    Les expressions des dérivées de Atan sont triviales à écrire.
    avac une tabulation par pas de 0.1 [ arctan(i/10) ] les erreurs sont de l'ordre de 0.5 à 0.6%

  7. #7
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    [HS]
    Ah lala, Trivial, trivial... Beaucoup de gens utilisent ce mot après avoir fait une prépa...
    En tout cas pour une personne du forum, je sais que j'ai raison
    [/HS]

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Points : 460
    Points
    460
    Par défaut
    Y'avais déjà une discussion sur ce sujet dans ce forum algorithmique, mais y'a vraiment longtemps (peut-être bien 1 an). J'ai pas retrouvé cette discussion après 2-3 miniutes de recherche.
    Quelqu'un y avait super bien répondu en donnant un lien sur un site qui explique les techniques utilisées dans les calculatrices.
    Ca m'avait surpris d'apprendre que ça n'utilise pas les développements limités, mais une technique qui converge bien plus rapidement.

    Sinon il existe des implémentations très optimisées de fonctions mathématiques dans la bibliothèque gratuite "Approximate Math library" d'Intel. Malheureusement c'est en assembleur, si t'as la patience d'analyser les fonctions...
    http://www.intel.com/design/Pentium4/devtools/

    PS: J'aurais dû regarder plus attentivement, je crois bien que le lien dont je parle est celui donné par Flo un peu plus haut.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. besoin d'un exemple de prog utilisant les fichiers
    Par b_steph_2 dans le forum C++
    Réponses: 10
    Dernier message: 25/11/2005, 09h03
  2. Lancer les prog en ligne de commande
    Par meufeu dans le forum Applications et environnements graphiques
    Réponses: 9
    Dernier message: 06/09/2004, 17h13
  3. Réponses: 8
    Dernier message: 17/10/2002, 12h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo