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 :

Signification de 1.*


Sujet :

C

  1. #1
    elm
    elm est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut Signification de 1.*
    Bonjour, dans l'instruction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            int d   =       a / (b*c) ;
            int e  =  (1.* a / (b*c) - d) * c ;
            int f = ((1.* a/ (b*c) - d) * c - e)*b ;
    Je voudrais savoir ce que fait l'expression "1.*", et pourquoi f ne vaut pas 0 alors qu'il vaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((1.* a / (b*c) - d) * c - (1.* a / (b*c) - d) * c)*b
    (surement lié à ce mystérieux 1.*).

    Merci d'avance...

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Pour moi, çà ressemble à:
    1.0 * a (Juste le zéro qui a sauté, quoi...)

  3. #3
    Membre habitué Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Points : 187
    Points
    187
    Par défaut
    Salut elm!!!

    '1.' est un réel et '*' est l'opérateur de multiplication ...

    De quels types sont a, b et c ???

    Marco85

  4. #4
    elm
    elm est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Ce sont des int... En gros ça servirait à faire un "cast" vers un float? Je ne vois pas en quoi ça modifierait numériquement l'expression de sorte que e et f soient non nuls...

  5. #5
    Membre habitué Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Points : 187
    Points
    187
    Par défaut
    Tu as une promotion de a, b et c avec ce '1.' vers le type float. Ensuite, comme ta valeur désirée est un int : le résultat est très aléatoire (il dépend de ta machine, de ton compilateur et presque de la force du vent ...)

    Marco85

  6. #6
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Salut

    Citation Envoyé par elm
    Ce sont des int... En gros ça servirait à faire un "cast" vers un float? Je ne vois pas en quoi ça modifierait numériquement l'expression de sorte que e et f soient non nuls...
    Ben en général, on met le .[0] lorsqu'on fait des mises à l'échelle (Un lit une valeur comprise entre 0 et 255 et on doit retourner un angle entre 0 et 90 degrès). Donc plutôt que de mettre des cast dans tous les sens, on spécifie un réel (Et eventuelleemnt on caste le résultat) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%d != %d\n", 90 / 256 * 27,(int)(90. / 256 * 27)) ;

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Dans une division entre deux termes, le diviseur étant plus grand que le dividende:
    - Si les deux sont entiers, cela donne une division entière: le quotient est nul.
    - Si l'un des deux au moins est un nombre à virgule flottante, c'est une division à virgule flottante: Le quotient est un nombre à virgule flottante, quelque part entre zéro et un.

    1/2 = 0
    1.0/2 = 0.5


    (Je me refuse à parler de nombres réels dans un système qui est incapable de les représenter: Il faut du calcul formel pour ça)

  8. #8
    Membre habitué Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Points : 187
    Points
    187
    Par défaut
    Citation Envoyé par Médinoc
    (Je me refuse à parler de nombres réels dans un système qui est incapable de les représenter: Il faut du calcul formel pour ça)
    Remarque très pertinante ... Je regrette mes "abus" de langage précédents ...

    Marco85

  9. #9
    elm
    elm est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Je ne comprends toujours pas pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((1.* a / (b*c) - d) * c - (1.* a / (b*c) - d) * c)*b
    est sensé être différent de 0 du coup...


    Sinon dans un autre registre, y a-t-il une différence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* arg, char * arg et char *arg
    ?

  10. #10
    Membre habitué
    Inscrit en
    Novembre 2002
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 120
    Points : 125
    Points
    125
    Par défaut
    Sinon dans un autre registre, y a-t-il une différence entre
    Code:
    char* arg, char * arg et char *arg
    ?
    Aucune différence. Les espaces n'ont pas vraiment de signification particulière en C, seul la notion de tokens compte.

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Marco85
    '1.' est un réel et '*' est l'opérateur de multiplication ...
    Pas de type 'réel' en C. C'est float ou double. Ici, c'est double.

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Marco85
    Tu as une promotion de a, b et c avec ce '1.' vers le type float.
    Non, double.

  13. #13
    Membre habitué Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Points : 187
    Points
    187
    Par défaut
    Merci Emmanuel pour ces informations et précisions ...

    Marco85

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/09/2004, 12h01
  2. [Mots cles]Signification de transient et volatile
    Par Pill_S dans le forum Langage
    Réponses: 2
    Dernier message: 14/07/2004, 11h58
  3. Réponses: 4
    Dernier message: 22/01/2004, 08h27
  4. Recherche la signification d'expressions en C
    Par sbadecoder dans le forum C
    Réponses: 16
    Dernier message: 20/08/2003, 07h35
  5. i386, x86 signification ?
    Par Thcan dans le forum Assembleur
    Réponses: 7
    Dernier message: 04/01/2003, 21h36

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