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 :

Le mystère insondable des const double


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Par défaut Le mystère insondable des const double
    Bonjour,

    j'ai récemment été mis en contact avec un bout de code qui m'a passablement étonné : le programmeur avait en effet défini les chiffres en const :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const double zero = 0.0, one = 1.0, two = 2.0, three = 3.0, four = 4.0,
    					  five = 5.0, six = 6.0, seven = 7.0, eight = 8.0, nine = 9.0, ten = 10.0,
    					  hundr = 100.0, infty = 1.0e100, epsnorm = 1.0e-15, epsnorm2 = 1.0e-30,
    					  powerm12 = 1.0e-12;
    Ca m'a vraiment étonné, car je ne vois pas du tout l'intérêt de faire ca (le type l'utilise plus tard dans des phases du genre double x = -one; )

    Quelqu'un sait-il quel peut être l'utilité de déclarer ce genre de constantes ?

    J'ai après moulte réflexion trouvé deux explications :
    - Le programmeur ne connait pas les chiffres, parce qu'il est Egyptien, et du coup il préfère les écrire en anglais plutôt que de prendre le risque de confondre les zero et les 5, par exemple
    - Cette méthode fait économiser du temps à l'ordinateur : ce dernier a plus de facilité à aller chercher une const, plutôt que de transcrire à chaque fois 1.0 en binaire.


    Ai-je raison, ou bien y a t il une autre explication, ou bien n'y a t il aucune explication et le type est juste un peu bizarre ?

    Merci d'avance...

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    A mon avis, c'est complètement c...
    Mais en tout cas le jour où le chiffre 1 s'écrira $£ au lieu de 1, il n'y aura que la constante à changer.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Membre Expert Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Par défaut
    - Le programmeur ne connait pas les chiffres, parce qu'il est Egyptien, et du coup il préfère les écrire en anglais plutôt que de prendre le risque de confondre les zero et les 5, par exemple


    A ce que je sache les chiffres s'écrivent pareille en Égypte

    Après si tu nous dis ce que fait ton application, peut-être qu'on pourrait trouver une logique.. mais peso je ne suis pas convaincu qu'il y en aie une.

  4. #4
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Un jour ce type à lu ou entendu qu'il était de bon ton de transformer ces littéraux en constantes. Du genre const int TVA plutot que 21, etc.

    Il a pris le conseil vraiment à la lettre!

    Mais si tu as le contexte... envoie, on en sais jamais.

  5. #5
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    A noter qu'il n'est pas le seul à faire cela. Je viens de passer à travers plusieurs patchs et code source sur le net et pas plus loin que dans un header de GCC on trouve des constantes pour ONE, TWO, TEN...

    Il doit peut-être y avoir une astuce, bien que je ne vois pas du tout laquelle. Les constantes sont remplacées à la compilation par la valeur littérale, donc qu'on ne me parle pas d'optimisation! :-)

  6. #6
    Membre Expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Par défaut
    Le seul intérêt est dans les définitions
    "epsnorm = 1.0e-15, epsnorm2 = 1.0e-30," puisque généralement ce sont des valeurs de seuil, de précision minimales requises (donc interressant de pouvoir les modifier vite)
    le reste... j'ai du mal à voir...

  7. #7
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Par défaut
    Citation Envoyé par bossun Voir le message

    A ce que je sache les chiffres s'écrivent pareille en Égypte

    Après si tu nous dis ce que fait ton application, peut-être qu'on pourrait trouver une logique.. mais peso je ne suis pas convaincu qu'il y en aie une.
    en egypte (et sans doute dans d'autres pays arabes), ils utilisent des chiffres comme ceci



    A part ca, le contexte c'est un algorithme de minimisation de fonction que j'ai rencontré dans mon boulot.

    Donc y a aucun moment où il ferait des trucs du genre demander à l'utilisateur de rentrer des chiffres en toutes lettres pour les traduire en chiffres.


    En plus, le type lâche l'affaire du "mettre tous les nombres en const" et fait des phases du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    low_bound = -one + 1.0e-4;  
     
    ou
     
    one / Math.Log(ng + 1.1)
    Si personne n'a d'explication, je pourrai demander à mes chefs (et même à l'auteur du programme, même s'il ne travaille plus ici), et je vous tiendrai au courant

  8. #8
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Oui, demande lui car ca serait très intéressant à savoir.

    Et j'ai appris quelquechose au sujet des cabines téléphoniques! Mais c'est le comble qu'ils n'utilisent pas les chiffres qu'ils ont inventés :-)

  9. #9
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Mon expérience m'a prouvé que quand on ne comprend pas du code, on a plus vite fait de surestimer l'intelligence de celui qui l'a codé que de la sous-estimer.
    M'étonne qu'il ait pas remplacé 1.1 par one + one / ten

  10. #10
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Citation Envoyé par Guulh Voir le message
    M'étonne qu'il ait pas remplacé 1.1 par one + one / ten
    :-D

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par neptune Voir le message
    Mais c'est le comble qu'ils n'utilisent pas les chiffres qu'ils ont inventés :-)
    Ben en fait ils utilisent aussi les chiffres arables, mais il en existe plusieurs formes...
    http://fr.wikipedia.org/wiki/Chiffres_arabes

  12. #12
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Par défaut
    Après avoir demandé à mes glorieux chefs, j'ai enfin un semblant de réponse que je ne comprends pas vraiment :


    apparemment, le programme serait : "traduit de matlab en c#". Je ne vois pas vraiment en quoi ca implique de mettre des trucs du genre "one=1.0;", mais aussi je ne connais pas le matlab, donc peut être qu'en matlab, ca a une utilité (ou peut être qu'ils ont utilisé un traducteur automatique qui fait ce genre de connerie, mais je n'avais jamais entendu parler de traducteurs automatiques d'un langage à un autre)

  13. #13
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Mon expérience (encore ) m'a prouvé que quand on a confirmation qu'une bizarrerie du code ne sert à rien, on a tout intérêt à prendre le temps de la supprimer pour simplifier le code. Histoire d'épargner à soi-même et au potentiel successeur une calvitie prématurée.

    Parce que passer d'une classe de 100 Ko sans commentaire à une classe de 60 Ko (cas vécu) dont une bonne part de commentaire, ça prend du temps mais ça simplifie considérablement la maintenance

  14. #14
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par Magemax Voir le message
    peut être qu'en matlab, ca a une utilité
    Euhh.. ... on est pas plus tordu que les autres...

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/07/2012, 12h00
  2. Utilisation des CONST
    Par Aragorn_destroy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/06/2007, 16h45
  3. [Tableaux] Foreach renvoie des valeurs double en php4
    Par Dantahoua dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2007, 17h49
  4. Réponses: 20
    Dernier message: 23/01/2007, 15h34
  5. requette qui renvoi des ligne double
    Par fehmitn dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/09/2004, 22h36

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