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

Langage Delphi Discussion :

Variable et type


Sujet :

Langage Delphi

  1. #1
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut Variable et type
    Voilà, en lisant quelques posts aujourd'hui, je vois que certains s'acharnent à utiliser des variables en word, double etc....
    un collègue m'avait confié une fois que delphi en fait tournait plus vite sur des variables de type extended pour les réels et integer pour les entiers.
    les autres types seraient donc descendants de ceux-ci... et ralentiraient plutôt les opérations.
    Est-ce vrai ou pas ?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 710
    Points : 25 593
    Points
    25 593
    Par défaut
    Pour avoir fait des tests sur les floattants, plus, ils sont volumineux en octet plus ils sont lents, voir ICI
    pour les entiers, je n'ai pas fait le test, mais le processeur étant un 32bit, cela semble a priori optimisé sur l'integer/cardinal

  3. #3
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Pour les flottants, c'est faux. Tout dépend de comment le co-processeur est configuré. Il peut être configuré pour travailler avec des Single, des Double ou des Extended. Un programme Delphi configure normalement le co-processeur pour Extended. Si tu le configures en-dessous, les Extended auront même précision que les Double (dans leur calcul).
    Mais question performances, c'est en effet essentiellement la taille qui est déterminante.

    Pour les entiers, avoir un processeur 32 bits signifie (plus ou moins) que faire quelque chose sur 4 octets prend autant de temps que sur 1 octet. Cependant, 1 octet reste plus petit en taille que 4, forcément. Donc en général on utilise les Byte/Word pour la taille, ou alors pour l'étendue.
    Mais faire des opérations sur des Word n'est pas plus lent que les faire sur des Integer.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Keo,
    Citation Envoyé par sjrd Voir le message
    Pour les entiers, avoir un processeur 32 bits signifie (plus ou moins) que faire quelque chose sur 4 octets prend autant de temps que sur 1 octet. Cependant, 1 octet reste plus petit en taille que 4, forcément. Donc en général on utilise les Byte/Word pour la taille, ou alors pour l'étendue.
    Mais faire des opérations sur des Word n'est pas plus lent que les faire sur des Integer.
    Sauf que les processeurs sont sensibles au mélange d'accès 8/16/32 bits, et on aura généralement dégradation si on utilise le tout sans faire attention.

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 710
    Points : 25 593
    Points
    25 593
    Par défaut
    Citation Envoyé par sjrd Voir le message
    Pour les flottants, c'est faux
    Euh qu'est ce qui est faux ? ceci
    un collègue m'avait confié une fois que delphi en fait tournait plus vite sur des variables de type extended
    ou cela
    plus, ils sont volumineux en octet plus ils sont lents
    car les deux sont fausses et vraies, en fait cela dépend totalement du processeur, entre le P3 et le P4, il y a un véritable fossé de performance, ... j'ai retrouvé le sujet sur Phidels, sur l'optimisation des flottants

    en fait, cela semble varié selon la valeur elle-même ... personnellement, j'ai raconté ce que j'ai pu constaté ..., et j'ai eu des résultats improbables ...

    testez vous même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    procedure TFrmTestMemory.BtnTempsFlottantClick(Sender: TObject);
    var
       StartTick, EndTick, TickPerSec, TimeIteration: Int64;
       i, k: integer;
     
       S, S2, SR: Single;
       D, D2, DR: Double;
       E, E2, ER: Extended;
       ED: Extended;
    begin
       S := 0.001;
       S2 := 111.0001;
       for k := 1 to 10 do
       begin
          QueryPerformanceCounter(StartTick);
          try
             for i := 1 to 10000000 do
             begin
                SR := S + S2;
             end;
          finally
             QueryPerformanceCounter(EndTick);
             QueryPerformanceFrequency(TickPerSec);
             TimeIteration := Round((EndTick - StartTick) / TickPerSec * 1000);
             MemoTimes.Lines.Add('Single N°' + IntToStr(k) + ' : ' + IntToStr(TimeIteration) + ' ms = ' + FloatToStr(SR));
          end;
       end;
     
       D := 0.001;
       D2 := 111.0001;
       for k := 1 to 10 do
       begin
          QueryPerformanceCounter(StartTick);
          try
             for i := 1 to 10000000 do
             begin
                DR := D + D2;
             end;
          finally
             QueryPerformanceCounter(EndTick);
             QueryPerformanceFrequency(TickPerSec);
             TimeIteration := Round((EndTick - StartTick) / TickPerSec * 1000);
             MemoTimes.Lines.Add('Double N°' + IntToStr(k) + ' : ' + IntToStr(TimeIteration) + ' ms = ' + FloatToStr(DR));
          end;
       end;
     
       E := 0.001;
       E2 := 111.0001;
       for k := 1 to 10 do
       begin
          QueryPerformanceCounter(StartTick);
          try
             for i := 1 to 10000000 do
             begin
                ER := E + E2;
             end;
          finally
             QueryPerformanceCounter(EndTick);
             QueryPerformanceFrequency(TickPerSec);
             TimeIteration := Round((EndTick - StartTick) / TickPerSec * 1000);
             MemoTimes.Lines.Add('Extended N°' + IntToStr(k) + ' : ' + IntToStr(TimeIteration) + ' ms = ' + FloatToStr(ER));
          end;
       end;
    end;
    j'ai obtenu sur un P4 3Ghz 512Mo WinXP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Single1 : 17 ms = 111,001098632813
    Single2 : 17 ms = 111,001098632813
    Single3 : 20 ms = 111,001098632813
    Single4 : 18 ms = 111,001098632813
    Single5 : 21 ms = 111,001098632813
    Single6 : 18 ms = 111,001098632813
    Single7 : 18 ms = 111,001098632813
    Single8 : 18 ms = 111,001098632813
    Single9 : 18 ms = 111,001098632813
    Single10 : 18 ms = 111,001098632813
    Double1 : 340 ms = 111,0011
    Double2 : 340 ms = 111,0011
    Double3 : 339 ms = 111,0011
    Double4 : 338 ms = 111,0011
    Double5 : 334 ms = 111,0011
    Double6 : 337 ms = 111,0011
    Double7 : 338 ms = 111,0011
    Double8 : 335 ms = 111,0011
    Double9 : 337 ms = 111,0011
    Double10 : 338 ms = 111,0011
    Extended1 : 94 ms = 111,0011
    Extended2 : 96 ms = 111,0011
    Extended3 : 94 ms = 111,0011
    Extended4 : 97 ms = 111,0011
    Extended5 : 94 ms = 111,0011
    Extended6 : 96 ms = 111,0011
    Extended7 : 94 ms = 111,0011
    Extended8 : 94 ms = 111,0011
    Extended9 : 98 ms = 111,0011
    Extended10 : 95 ms = 111,0011

  6. #6
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Euh qu'est ce qui est faux ?
    Je parlais de "les Extended vont plus vite".

    Ceci dit, à la lumière de ce que tu me montres, va falloir que je me remette en question J'aurais quand même pas imaginé que les Double aillent si lentement.

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 710
    Points : 25 593
    Points
    25 593
    Par défaut
    C'est tellement complexe tout ça, avec toutes les options de compilation (que je ne connais pas pour le co-proc), les modèles de processeur, et est-il pensable que la valeur flottante elle-même influence la complexité du calcul ? et de l'humeur de la machine, j'ai des temps qui change, parfois le double est aussi rapide que le single, parfois c'est le temps d'un extended... testez donc sur vos machines, pour comparer, parce que, c'est la première fois que j'ai des temps comme ceci ! ça doit être un mauvais jour ... ou alors j'ai changé un truc qu'il ne fallait pas un jour ...

  8. #8
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    merci pour vos réponses tout à fait pertinentes...
    je teste...
    et je revoie mon jugement...
    ce n'est pas une question inintéressante...
    a+

Discussions similaires

  1. affecter une variable de type stringstream
    Par sorari dans le forum SL & STL
    Réponses: 3
    Dernier message: 24/03/2005, 12h14
  2. Ajouter a une variable de type string, un entier
    Par Little-Freud dans le forum SL & STL
    Réponses: 12
    Dernier message: 05/03/2005, 20h33
  3. [VB.NET] Variable de type enum avec du string
    Par Mouse dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/01/2005, 19h22
  4. Oracle 9i : PLSQL - Variable de type LONG
    Par vortex dans le forum PL/SQL
    Réponses: 8
    Dernier message: 16/11/2004, 14h23
  5. [VB6] creation de variable de type string dynamiquement
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 12/06/2003, 17h59

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