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

 C Discussion :

Faire un for avec comme index un float ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    ingénieur
    Inscrit en
    Septembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 54
    Par défaut Faire un for avec comme index un float ?
    Bonjour

    je souhaiterais pouvoir faire une boucle avec comme index, un nombre commençant par 0.000 , comment s'y prendre pour que ce dernier soit pris en compte et me sort 0.001,0.002,0.003 etc... ?

    merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Naïvement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    double x; /* Je ne vois aucune raison de preferer naturellement float a double */
    for(x = 0.000; x <= 1.000; x += 0.001)
       /* Le traitement */ ;
    Mais je préfère, et recommande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int i;
    double x;
    for(i = 0; i <= 1000; i++)
    {
        x = i / 1000.0;
        /* Le traitement */ ;
    }

  3. #3
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Citation Envoyé par Melem Voir le message
    Naïvement :Je ne vois aucune raison de preferer naturellement float a double
    Il en a une pourtant que j'invoque assez souvent: Faire tourner sur PC des sources C qui tournent à l'origine sur des petits processeurs genre 8051 ne connaissant que le float32, d'ailleurs largement suffisant pour ce qu'on leur demande.

    A+

    Pfeuh

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    Voire pour effectuer un traitement sans devoir passer par des variables temporaires.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    double r;
    double var = 0.25
    for (r = 0.000; r < (90 + var); r += var)
    {
        rotation (r); /* On effectue une rotation en degrés */
    }
    C'est pour moi plus efficace que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int cpt;
    double r = 0.000;
    double var = 0.25;
    for (cpt = 0; r < ((90 / var) + 1); cpt++)
    {
        r += var;
        rotation (r);
    }

  5. #5
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par pfeuh
    Il en a une pourtant que j'invoque assez souvent: Faire tourner sur PC des sources C qui tournent à l'origine sur des petits processeurs genre 8051 ne connaissant que le float32, d'ailleurs largement suffisant pour ce qu'on leur demande.
    Ah ?
    8051 specific language extensions are described below.

    Data sizes

    The compiler uses the following sizes for the various C data types:

    (...)
    float: 4 bytes (32 bits)
    double: 8 bytes (64 bits)
    (...)
    Source : http://www.crossware.com/datasheets/c8051nt.htm

    De toute façon j'ai pas dit que le type float ne servait à rien, que ça soit sur 8051 ou ailleurs, mais que s'il n'y a pas de raisons très particulières vaut mieux utiliser double plutôt que float.

    Bsans : franchement, utiliser un type flottant comme indice dans une boucle n'est pas une très bonne idée à cause de l'imprécision de ces types. Puis, je doute que le second code est plus efficace que le premier mais de toute façon, que ça soit vraiment le cas où pas, tes deux techniques ne sont pas une bonne façon de faire une rotation animée, toujours à cause de l'imprécision des réels. La bonne méthode est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int i;
    double delta_angle = 0.25;
    for(i = 0; i <= 360; i++)
    {
        set_angle(i * delta_angle)
    }

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    C'était juste une illustration du fait qu'on puisse avoir besoin d'autre chose qu'un "compteur classique" dans une boucle.

    Je ne dis pas que c'est bien ou pas, juste que c'est faisable et que ça peut servir dans certains cas.

  7. #7
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Citation Envoyé par Melem Voir le message
    Ah ?
    Je n'ai pas dit que ça n'existait pas. Je dis juste que même avec le compilo Keil à 3000 euros pour la famille 8051 que j'utilise, je ne vais pas faire bosser un 8 bits en float64.

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/04/2014, 13h38
  2. Réponses: 6
    Dernier message: 09/03/2009, 17h10
  3. Formulaire avec comme action="index.php?confirm.php" POSSIBLE ?
    Par jiojioforever dans le forum Langage
    Réponses: 2
    Dernier message: 14/11/2006, 11h13
  4. faire un fetch avec le nom d une table comme parametre
    Par cbon1 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 18/09/2006, 17h08
  5. faire plusieur declaration avec boucle for ?
    Par debutant-1 dans le forum C
    Réponses: 4
    Dernier message: 18/05/2006, 20h19

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