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 :

Détection débordement de capacité Int64


Sujet :

Langage Delphi

  1. #1
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut Détection débordement de capacité Int64
    Bonjour,

    Las de tourner en round : J'essaye de détecter et de signaler via un ShowMessage le cas d'un débordement de capacité d'un Int64 de la façon suivante mais ça ne marche pas (en rose ci-dessous). Par contre la détection du débordement de capacité d'un Extended (en vert ci-dessous) marche ... mais je n'en ai pas besoin.

    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
    procedure TForm1.EIntOverflow1Click(Sender: TObject);
    var       i64 : int64; ext : extended;
    begin
              {$Q+}
              try i64:=9223372036854775807; //<- presque Int64Max
                  i64:=i64*i64;             //<- je provoque le débordement
                  Memo1.lines.Add('i64 : '+intToStr(i64));  
              except
                  on EIntOverflow  do ShowMessage('Débordement capacité Int64');
              end;
              
              {$R+}
              try ext:=1.1E4932; //<- ExtendedMax
                  ext:=ext*2;    //<- je provoque le débordement
                  Memo1.lines.Add('ext : '+FloatToStr(ext));
              except
                  on EOverflow do ShowMessage('Débordement capacité Extended');
              end;
    end;
    Quelqu'un aurait-il une idée pour faire fonctionner la détection et le signalement du débordement de capacité de l'Int64 ???. S.V.P et merci par avance.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Salut Gilbert,

    Sous Delphi 7 ton code ne fonctionne pas tel quel effectivement. Par contre par curiosité j'ai remplacé i64*i64 par un i64 + i64 et là bingo l'exception se déclenche. Est-ce qu'il y aurait une mauvaise interprétation du symbole * par le compilateur ?
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    En remplaçant (Sous Delphi 5) le i64*i64 par un i64 + i64 l'exception se déclenche effectivement ... mais pas avec la multiplication !!!???.
    Est-ce qu'il y aurait une mauvaise interprétation du symbole * par le compilateur ?
    ... Je ne pense pas car si je remplace le i64:=i64*i64 par i64:=33*33; le Memo1 m'affiche le resultat exact de la multiplication : 1089 donc le symbole * est bien interprêté.

    Donc, merci pour l'addition ça marche ... reste à trouver comment faire fonctionner le code pour la multiplication.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  4. #4
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Je penserai alors que, a cause de la multiplication, on a un chiffre vraiment vraiment trop gros ... qui ne serait pas géré par le compilateur ... As tu vraiment besoin de chiffres aussi gros ?

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    Je penserai alors que, a cause de la multiplication, on a un chiffre vraiment vraiment trop gros ... qui ne serait pas géré par le compilateur ... As tu vraiment besoin de chiffres aussi gros ?
    ... Ben quand je remplace le i64 : int64 par du Byte la détection du débordement ne marche pas non plus. J'utilise le Int64 vu qu'il existe et pour lequel la détection d'un débordement devrait marcher tout comme celle d'un Extended qui est encore nettement plus gros que Int64Max.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  6. #6
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Pour le Int64 et le Extended, je ne pense pas qu'ils fonctionnent de la meme maniere ... En tout cas, le probleme est toujours présent. Si tu en as vraiment besoin, utilise un Extended !

    Bonne chance pour la suite

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    C'est bien un bug dans delphi...
    ici on donne une solution...
    j'ignore cependant comment l'implantée dans Delphi 5

    http://qc.embarcadero.com/wc/qcmain.aspx?d=34049
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    A Eric Boisvert
    C'est bien un bug dans delphi...
    ... Merci beaucoup ça localise au moins le bug car je le cherchais dans mon propre code.

    ici on donne une solution...
    j'ignore cependant comment l'implanter dans Delphi 5
    ... Ils parlent de System.pas dans l'introduction. J'ai essayé de voir si mon System.pas ne contiendrait pas tout simplement une procedure __llmulo;
    à remplacer par celle d'Embarcadero ... mais je ne trouve sur mon disque dur que StSytem.pas et mmSystem.pas mais aucun System.pas (j'ai uniquement System.dcu).

    En tous cas merci beaucoup.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  9. #9
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Pas de fichier systeme.pas dans Delphi 7, ni dans Delphi 2005. Par contre il est présent dans turbo delphi 2006 dans C:\Program Files\Borland\BDS\4.0\source\Win32\rtl\sys
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  10. #10
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Citation Envoyé par archonte Voir le message
    Pas de fichier systeme.pas dans Delphi 7, ni dans Delphi 2005. Par contre il est présent dans turbo delphi 2006 dans C:\Program Files\Borland\BDS\4.0\source\Win32\rtl\sys
    Bonjour,

    les fichiers .Pas ne sont pas livrées avec les versions perso de Delphi.

  11. #11
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 862
    Points : 11 318
    Points
    11 318
    Billets dans le blog
    6
    Par défaut
    dans mon System.pas (D5 Pro) ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    { 64-bit Integer helper routines - recycling C++ RTL routines }
     
    procedure __llmul;      external;    {$L _LL  }
    procedure __lldiv;      external;    {   _LL  }
    procedure __llmod;      external;    {   _LL  }
    procedure __llmulo;     external;    {   _LL  (overflow version) }
    procedure __lldivo;     external;    {   _LL  (overflow version) }
    procedure __llmodo;     external;    {   _LL  (overflow version) }
    procedure __llshl;      external;    {   _LL  }
    procedure __llushr;     external;    {   _LL  }
    procedure __llumod;     external;    {   _LL  }
    procedure __lludiv;     external;    {   _LL  }
    est-il possible de hooker la fonction par son correctif ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    A Tourlourou :
    est-il possible de hooker la fonction par son correctif ?
    ... tu peux toujours essayer en prenant soin de planquer ton System.pas et ton System.dcu originels sous un autre nom de façon à pouvoir rétablir la configuration originelle en cas d'échec du correctif.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  13. #13
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 862
    Points : 11 318
    Points
    11 318
    Billets dans le blog
    6
    Par défaut
    Bien sûr, je pensais plutôt à un utilisateur de version perso, sans le fichier .pas à corriger : on doit pouvoir patcher en redirigeant la fonction (ce n'est pê pas hyper propre, d'ailleurs...)
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  14. #14
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message
    Bonjour,

    les fichiers .Pas ne sont pas livrées avec les versions perso de Delphi.
    Turbo Delphi est une version perso et gratuite et permettant la conception d'application à but commercial ! Seul inconvénient : l'impossibilité d'ajouter des composants ...
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  15. #15
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Citation Envoyé par archonte Voir le message
    Turbo Delphi est une version perso et gratuite et permettant la conception d'application à but commercial ! Seul inconvénient : l'impossibilité d'ajouter des composants ...
    Mais Turbo Delphi ne pond t-il pas des EXE monstrueux ?
    (En poids)

  16. #16
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    Finalement j'ai retenu la parade suivante sous Delphi-5 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function MulInt64(a,b : Int64) : Int64; // Multiplication de a par b avec test de risque de débordement
    const    i64Max = 9223372036854775807;
    var      u : Int64;
    begin    u :=i64Max div b;
             if u>=a then Result:=a*b else
             begin Result:=0; showMessage('Débordement de capacité dans MulInt64'); end;
    end;
    C'est peut-être une méthode "bourrin" mais ça marche et comme je n'en ai pas besoin dans le cadre de calculs intensifs c'est pas trop gênant de faire une division pour voir si la multiplication est possible sans risque de débordement.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  17. #17
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    c'est pas trop gênant de faire une division pour voir si la multiplication est possible sans risque de débordement.
    Sauf si b est égale à zéro...

    Voici ce que j'ai trafiqué pour mon Delphi 5.
    C'est un hybride entre l'approche de Gilbert mais j'utilise la sudgestion de
    John O'Harrow sur QualityCentral.
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
     
     
    (* ***** BEGIN LICENSE BLOCK *****
    * Version: MPL 1.1
    *
    * The implementation of function __llmulo is subject to the
    * Mozilla Public License Version 1.1 (the "License"); you may
    * not use this file except in compliance with the License.
    * You may obtain a copy of the License at http://www.mozilla.org/MPL/
    *
    * Software distributed under the License is distributed on an "AS IS" basis,
    * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    * for the specific language governing rights and limitations under the
    * License.
    *
    * Portions created by the Initial Developer are Copyright (C) 2002-2004
    * the Initial Developer. All Rights Reserved.
    *
    * Contributor(s): John O'Harrow
    *
    * ***** END LICENSE BLOCK ***** *)
     
    // ----------------------------------------------------------------------------
    //  64-bit signed multiply, with overflow check
    // ----------------------------------------------------------------------------
     
    //  Param 1(EDX:EAX), Param 2([ESP+8]:[ESP+4])
     
    //  compiler-helper function
    //  O-flag set on exit   => result is invalid
    //  O-flag clear on exit => result is valid
     
    Procedure __llmulo();
    Asm
      test    edx, edx           {Param1-Hi = 0?}
      jne     @@Large            {No, More than one multiply may be needed}
      cmp     edx, [esp+8]       {Param2-Hi = 0?}
      jne     @@Large            {No, More than one multiply may be needed}
      mul     dword ptr [esp+4]  {Only one multiply needed, Set Result}
      and     eax, eax           {Clear Overflow Flag}
      ret     8
    @@Large:
      sub     esp, 28             {allocate local storage}
      mov     [esp], ebx         {save used registers}
      mov     [esp+4], esi
      mov     [esp+8], edi
      mov     [esp+12], ebp
      mov     ebx, [esp+32]      {Param2-Lo}
      mov     ecx, [esp+36]      {Param2-Hi}
      mov     esi, edx
      mov     edi, ecx
      sar     esi, 31
      sar     edi, 31
      xor     eax, esi
      xor     edx, esi
      sub     eax, esi
      sbb     edx, esi           {edx:eax (a1:a0) = abs(Param1)}
      xor     ebx, edi
      xor     ecx, edi
      sub     ebx, edi
      sbb     ecx, edi           {ecx:ebx (b1:b0) = abs(Param2)}
      xor     esi, edi           {Sign Flag, 0 if Params have same sign else -1}
      mov     [esp+16], eax      {a0}
      mov     [esp+20], edx      {a1}
      mov     [esp+24], ecx      {b1}
      mul     ebx                {edx:eax (c1:c0) = a0*b0}
      xchg    ebx, edx           {ebx = c1, edx = b0}
      mov     edi, eax           {abs(Result-Lo) = c0}
      xor     ecx, ecx           {Upper 32 bits of 128 bit result}
      xor     ebp, ebp           {Second 32 bits of 128 bit result}
      mov     eax, [esp+20]      {a1}
      mul     edx                {edx:eax (d1:d0) = a1*b0}
      add     ebx, eax           {c1 + d0}
      adc     ebp, edx           {d1 + carry}
      adc     ecx, 0             {Possible carry into Upper 32 bits}
      mov     eax, [esp+16]      {a0}
      mov     edx, [esp+24]      {b1}
      mul     edx                {edx:eax (e1:e0) = a0*b1}
      add     ebx, eax           {abs(Result-Hi) = c1 + d0 + e0}
      adc     ebp, edx           {d1 + e1 + carry}
      adc     ecx, 0             {Possible carry into Upper 32 bits}
      mov     eax, [esp+20]      {a1}
      mov     edx, [esp+24]      {b1}
      mul     edx                {edx:eax (f1:f0) = a1*b1}
      add     ebp, eax           {d1 + e1 + f0 + carry}
      adc     ecx, edx           {f1 + carry}
      or      ecx, ebp           {Overflow if ecx <> 0 or ebp <> 0}
      jnz     @@Overflow
      mov     edx, ebx           {Set abs(Result-Hi)}
      mov     eax, edi           {Set abs(Result-Lo)}
      cmp     edx, $80000000
      jae     @@CheckRange       {Possible Overflow if edx>=$80000000}
    @@SetSign:
      xor     eax, esi           {Correct Sign of Result}
      xor     edx, esi
      sub     eax, esi
      sbb     edx, esi
      mov     ebx, [esp]         {restore used registers}
      mov     esi, [esp+4]
      mov     edi, [esp+8]
      mov     ebp, [esp+12]
      add     esp, 28            {Clears Overflow flag}
      ret     8
    @@CheckRange:
      jne     @@Overflow         {Overflow if edx>$80000000}
      test    esi, esi           {edx=$80000000, Is Sign Flag=0?}
      jnz     @@SetSign          {No, Result is Ok (-MaxInt64)}
    @@Overflow:
      mov     ebx, [esp]         {restore used registers}
      mov     esi, [esp+4]
      mov     edi, [esp+8]
      mov     ebp, [esp+12]
      add     esp, 28
      mov     ecx, $80000000
      dec     ecx                {Set Overflow Flag}
      ret     8
    End;
     
     
    //******************************************************************************
    //*** Appele de __llmulo() pour effectuer une multiplication de deux Int64
    //*** avec detection de dépassement.
    Function MulInt64(a: int64; b: int64): int64;
    Var
      OverFlow: boolean;
    Begin
      OverFlow := FALSE;
      Asm
        //Preparation des paramètres de la fonction __llmulo()
        //Param 1(EDX:EAX)
        mov edx,DWORD PTR a[4]
        mov eax,DWORD PTR a
        //Param 2([ESP+8]:[ESP+4]) (sur la pile)
        PUSH DWORD PTR b[4]
        PUSH DWORD PTR b
        call __llmulo
        //Verification de l'Overflow
        jno @@End
        mov OverFlow,TRUE
      @@End:
        //Met le resultat dans result
        mov DWORD PTR result[4],edx
        mov DWORD PTR result,eax
      End;
      //si il y a detection d'un OverFlow, lance une exception!
      If OverFlow Then Raise EIntOverflow.CreateFmt('Overflow Int64 in MulInt64(a=%d,b=%d)=%d', [a, b, result]);
    End;
     
     
     
    Procedure TForm1.Button1Click(Sender: TObject);
    Var
      i64: int64;
    Begin
      i64 := high(int64) - 1;
      Try
        Memo1.text := IntToStr(MulInt64(i64, i64));
      Except
        On EIntOverflow Do ShowMessage('Débordement capacité Int64');
      End;
    End;
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  18. #18
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    @ Gilbert Geyer
    En comparant aussi avec votre méthode, du moment que b inférieur à zéro...
    il y a détection de débordement dans votre fonction...
    MulInt64(100,-5)=

    J'ai testé et corrigé mon post précédent et c'est très rapide
    comme le dit Mr. John O'Harrow...
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  19. #19
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    A Eric Boisvert : Merci beaucoup ... J'ai testé et ça marche à merveille (et en tous cas mieux qu'avec ma bidouille qui risquait de provoquer elle-même un débordement en cas de division par zéro).

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. intval et débordement de capacité
    Par sws2008 dans le forum Langage
    Réponses: 4
    Dernier message: 07/01/2009, 12h24
  2. détection de dépassement de capacité
    Par tut dans le forum C++
    Réponses: 10
    Dernier message: 01/12/2004, 22h11
  3. Détection MySql
    Par gjullien dans le forum Bases de données
    Réponses: 5
    Dernier message: 20/08/2003, 18h15
  4. Détections avec WebBrowser
    Par Wazo_Sportive dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/08/2002, 19h32
  5. Détection de 2 touches appuyées
    Par cyrose dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/07/2002, 16h25

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