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

Développement 2D, 3D et Jeux Discussion :

question de performance : transtypage ou pas ?


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 96
    Points : 110
    Points
    110
    Par défaut question de performance : transtypage ou pas ?
    Soit 8 angles élémentaires 0,45,90,135,180,225,270,315.

    Je souhaite arrondir l'angle issu d'un calcul vers l'angle élémentaire le plus proche.
    Pour cela je fais comme ci dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    a = atan2(dty,dtx);
    int ad=(int) (a*180/M_PI);
    ad=(ad+360) % 360;
    float nofrm=  (float) ad / 45;
    fmx = ((int) Arrondit(nofrm)) % 8;
    Je fais du transtypage car l'opérateur modulo (%) ne veut que des entiers.

    Mieux vaut faire ce transtypage ou créer une fonction de comparaison permettant selon l'intervalle dans lequel se trouve l'angle de retourner l'angle élémentaire ?

    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (angle>0 && angle <23) return 0; 
    if (angle>22 && angle <67) return 45;
    .....etc...........

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    C'est difficile a dire. Il faut faire des tests et voir. Cela dépend de l'architecture, des données en entrées, de l'état mémoire et du code englobant utilisé...

    Jc

  3. #3
    Invité
    Invité(e)
    Par défaut
    ça ressemble à du C ou du C++, utilise la fonction fmod() ou alors refait le calul de modulo à la main... tu évite le cast.

    Si tes intervalles resterons les même, mieux vaus utiliser ma 2eme methode, qui au moins évite de se poser des questions de calculs.

    Par contre, on preferera quand même ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (angle>0 ) {
       if (angle >23) {
          if (angle >67) {
              return 90
          }
          return 45;
       }
       return 0;
    }
    de manière à eviter de refaire trop de tests...


    Enfin, dans l'ensemble, il vaux mieux tester les 2-3 methodes que tu trouvera et prendre la plus rapide (et la plus stable aussi)

  4. #4
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par bibi.skuk
    on preferera quand même ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (angle>0 ) {
       if (angle >23) {
          if (angle >67) {
              return 90
          }
          return 45;
       }
       return 0;
    }
    de manière à eviter de refaire trop de tests...
    je dirai même plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(angle > 67) return 90;
    if(angle > 23) return 45;
    return 0;
    encore moins de tests

    fmod sera certainement plus pratique, mais comme fearyourself et bibi.skuk je te conseille de tester les différentes méthodes en situation réelle, càd pas une simple boucle for qui teste 1 million de fois l'opération parceque le compilo et le cpu risquent d'optimiser et fausser le résultat
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par shenron666
    je dirai même plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(angle > 67) return 90;
    if(angle > 23) return 45;
    return 0;
    encore moins de tests
    Faux... Dans le cas où l'angle est plus petit que 23 (je considére le test >0 inutile d'ailleurs), la première solution serait plus rapide. Dans le cas d'un angle plus grand que 67, ton code serait plus grand.

    D'où l'importance des tests en sachant qu'il faut que les tests représentent bien le fonctionnement réel du programme...

    Jc

  6. #6
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    sachant que je répondais juste par rapport au code de bibi.skuk, j'ai faux quand même ?

    enfin, il n'y a pas de solution miracle où on le fait qu'un ou deux tests, je chercherai plutot la logique où le nombre de tests dans le pire des cas soit minimal
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  7. #7
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par shenron666
    sachant que je répondais juste par rapport au code de bibi.skuk, j'ai faux quand même ?
    Ben oui, c'est justement par rapport à celui-là que je dis que ce n'est pas vrai dans tous les cas.

    enfin, il n'y a pas de solution miracle où on le fait qu'un ou deux tests, je chercherai plutot la logique où le nombre de tests dans le pire des cas soit minimal
    Exact, c'est vers cela qu'il faut aller

    Jc

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/02/2012, 11h12
  2. Question de fond : Composant ou pas Composant ?
    Par waterbed dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 3
    Dernier message: 23/06/2006, 18h46
  3. [question de performance]
    Par viny dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/08/2005, 22h48
  4. [Performance] - Blob ou pas pour les images d'un site ?
    Par ShinJava dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 04/07/2005, 17h32
  5. Question de performance
    Par davidx dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/11/2003, 22h55

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