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

Flash Pascal Discussion :

Integer, Number, Double [Flash Pascal]


Sujet :

Flash Pascal

  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut Integer, Number, Double
    Bonjour !

    J'aurais besoin de connaître la valeur maximale du type Integer et, par la même occasion, je voudrais connaître aussi les caractéristiques précises du type Number.

    Pour le type Integer, d'après ce que j'ai compris, il n'existe pas dans ActionScript : il est déclaré dans le compilateur FlashPascal. Quant à Double, c'est un simple alias pour Number, n'est-ce pas ?

    En attendant j'ai mis ma constante MaxInt à 10000, ce qui nous fait (étant donné la valeur de FRAME_RATE) une durée de 5000 secondes pour l'exécution complète du programme suivant. Je pense que ça suffira largement.

    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
    {$FRAME_WIDTH 352}
    {$FRAME_HEIGHT 64}
    {$BACKGROUND $545454}{DarkGray}
    {$FRAME_RATE 4}
     
    program Wallis1;
     
    (* Produit de Wallis (approximation de Pi/2) *)
     
    uses
      Flash8, Couleurs;
     
    type
      Horloge = class(MovieClip)
        procedure onEnterFrame; override;
      end;
     
    const
      MaxInt = $7FFFFFFF;
     
    var
      h: Horloge;
      f: TextFormat;
      t: TextField;
     
      i: integer; // nombre entier de 1 à l'infini
      p: double;  // produit de Wallis (converge vers PI/2)
     
    procedure Horloge.onEnterFrame;
    begin
      if i = MaxInt then
        exit;
     
      p := p * ((2*i)/(2*i-1));
      p := p * ((2*i)/(2*i+1));
     
      t.text := FloatToStr(p);
      Inc(i);
    end;
     
    begin
      f := TextFormat.Create('Courier', 24);
      f.color := BrightGreen;
      f.align := 'center';
      h := Horloge.Create(nil, 'h', 0);
      h.opaqueBackground := DarkGray;
      h._x := 16;
      h._y := 16;
      t := TextField.Create(h, 't', 0, 0, 0, 20 * 16, 32);
      t.setNewTextFormat(f);
     
      i := 1;
      p := 1;
    end.
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Alors c'est un peu spécial en effet, Flash ne connait que le type Number qui est d'ailleurs un objet.

    dans FlashPascal j'ai introduit la notion d'entier, mais je ne fais aucun contrôle particulier, la preuve:

    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
     
    program Project3;
     
    {$FRAME_WIDTH 550}
    {$FRAME_HEIGHT 400}
    {$FRAME_RATE 12}
    {$BACKGROUND $FFFFFF}
     
    uses
      Flash8;
     
    var
      Log: TextField;
      i,j: Integer;
     
    begin
      Log := TextField.Create(_root, 'log', 1, 0, 0, Stage.width, Stage.Height);
      i := 32760;
      for j := 0 to 10 do
      begin
        Log.Text := Log.Text + IntToStr(i) + #13#10;
        i := i * i;
      end;
    end.
    32760
    
    1073217600
    
    1.15179601694976e+18
    
    1.32663406466133e+36
    
    1.75995794151985e+72
    
    3.09745195591878e+144
    
    9.59420861922505e+288
    
    Infinity
    
    Infinity
    
    Infinity
    
    Infinity
    
    en théorie Integer devrait être sur 32bits de -32768 à +32767
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    D'accord.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const
      MinInt = -32768;
      MaxInt = +32767;
    Mais il y a quelque chose qui m'échappe. Cette étendue-là, c'est celle d'un nombre représenté sur 16 bits, non ?

    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
     
    program Project3a;
     
    {$FRAME_WIDTH 550}
    {$FRAME_HEIGHT 400}
    {$FRAME_RATE 12}
    {$BACKGROUND $FFFFFF}
     
    uses
      Flash8;
     
    var
      Log: TextField;
      i: Integer;
     
    begin
      Log := TextField.Create(_root, 'log', 1, 0, 0, Stage.width, Stage.Height);
     
      //i := $FFFF;            //  65535
      //i := $FFFF div 2;      //  32767
      //i := $7FFF;            //  32767
      //i := $FFFF shr 1;      //  32767
      i := -($FFFF shr 1) - 1; // -32768
      Log.Text := IntToStr(i) + #13#10;
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Et Number alors, combien a-t-il de bits ? Et où met-il ses décimales ?

    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
     
    program Project3b;
     
    {$FRAME_WIDTH 550}
    {$FRAME_HEIGHT 400}
    {$FRAME_RATE 12}
    {$BACKGROUND $FFFFFF}
     
    uses
      Flash8;
     
    var
      Log: TextField;
      i: Integer;
      n: Number;
     
    begin
      Log := TextField.Create(_root, 'log', 1, 0, 0, Stage.width, Stage.Height);
     
      //i := $FFFF;           //      65535
      //n := $FFFF;           //      65535
      //i := $FFFFFF;         //   16777215
      //n := $FFFFFF;         //   16777215
      //i := $FFFFFFFF shr 1; // 2147483647
      //n := $FFFFFFFF shr 1; // 2147483647
      i := $FFFFFFFF;         //         -1
      n := $FFFFFFFF;         //         -1
     
      Log.Text := IntToStr(i) + #13#10 + FloatToStr(n);
    end.
    Et enfin comment peut-il contenir un nombre aussi grand que 9 fois 10 puissance 288 (comme on le voit dans ton exemple) ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Kei,

    Manifestement, Number correspond à un type double.

    Limites du type double : 1.7*10-308 à 1.7*10+308.

    Donc avec 9.59420861922505e+288, si on élève au carré, on dépasse la borne supérieure.

    Si les cons volaient, il ferait nuit à midi.

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    oui Number c'est un Double, et oui 32768 c'est du 16bits, je me suis trompé

    j'ai introduit les entiers dans FlashPascal par habitude, je trouve douteux par exemple d'indexer un tableau avec un Double Mais Flash ne fait pas de distinction entre "1", 1 et 1.0

    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
     
    program Project3;
     
    {$FRAME_WIDTH 550}
    {$FRAME_HEIGHT 400}
    {$FRAME_RATE 12}
    {$BACKGROUND $FFFFFF}
     
    uses
      Flash8;
     
    var
      Log: TextField;
      arr: array[0..2] of string;
      tab: Variant;
    begin
      arr[0] := 'zero';
      arr[1] := 'un';
      arr[2] := 'deux';
     
      Log := TextField.Create(_root, 'log', 1, 0, 0, Stage.Width, Stage.Height);
     
      tab := arr; // nécessaire car FlashPascal n'accepte que les entiers comme indice de tableau
     
      Log.Text := 'arr[1] = ' + tab[1]
             + #13"arr['1'] = " + tab['1']
             + #13'arr[1.0] = ' + tab[1.0];
    end.
    arr[1] = un
    arr['1'] = un
    arr[1.0] = un
    
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    D'accord, cette fois j'ai compris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const
      MaxInt = $7FFFFFFF; //  2147483647
      MinInt = $80000000; // -2147483648
    Merci Paul pour le code.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Voici un essai d'un programme qui permet de visualiser la forme binaire d'un nombre de type Integer. A la place des "0" et des "1" j'ai mis des voyants.

    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
    {$FRAME_WIDTH 432}
    {$FRAME_HEIGHT 24}
    {$FRAME_RATE 4}
    {$BACKGROUND $545454}{Couleurs.DarkGray}
     
    program Bits;
     
    (* FlashPascal 2 v13.06.05 *)
     
    uses
      Flash8, Couleurs;
     
    const
      MaxInt = $7FFFFFFF;
     
    type
      TPoint = class(MovieClip)
        procedure Tracer;
        constructor Create(Depth, x, y, Color: Integer);
        procedure SetColor(Color: Integer);
      end;
     
    procedure TPoint.Tracer;
    begin
      MoveTo(0, -4);
      CurveTo(+4, -4, +4,  0);
      CurveTo(+4, +4,  0, +4);
      CurveTo(-4, +4, -4,  0);
      CurveTo(-4, -4,  0, -4);
    end;
     
    constructor TPoint.Create(Depth, x, y, Color: Integer);
    begin
      inherited Create(nil, '', Depth);
      LineStyle(0, Color);
      BeginFill(Color);
      Tracer;
      EndFill();
      _x := x;
      _y := y;
    end;
     
    procedure TPoint.SetColor(Color: Integer);
    begin
      LineStyle(0, Color);
      BeginFill(Color);
      Tracer;
      EndFill();
    end;
     
    var
      a: array[0..31] of TPoint;
      i: Integer;
     
    type
      Horloge = class(MovieClip)
        procedure onEnterFrame; override;
      end;
     
    procedure Horloge.onEnterFrame;
    var
      x: Integer;
    begin
      if i < MaxInt then
      begin
        for x := 0 to 31 do
          if i and (1 shl x) > 0 then
            a[31-x].SetColor(LawnGreen)
          else
            a[31-x].SetColor(Gray);
        Inc(i);
      end;
    end;
     
    var
      x: Integer;
     
    begin
      for x := 0 to 31 do
          a[x] := TPoint.Create(
            x + 1,
            12 * x + 12 * (x div 8) + 12,
            12,
            Gray
          );
      i := 0;
      Horloge.Create(nil, 'h', 0);
    end.
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  9. #9
    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 : 58
    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
    Moralité, si on a besoin d'un réel, on met number tout le temps... Ce n'est pas la peine de se compliquer la vie..

    Pour Roland: sympa le contenu de ton onEnterFrame... c'est bien écrit.

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

Discussions similaires

  1. cast d'un objet soit integer soit double en double
    Par Ceubex dans le forum Langage
    Réponses: 8
    Dernier message: 07/06/2011, 11h49
  2. Différence entre Integer et double?
    Par Michel DELAVAL dans le forum Access
    Réponses: 15
    Dernier message: 10/02/2006, 15h57
  3. convertir un Double en integer
    Par amelhog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/08/2005, 09h08
  4. Réponses: 3
    Dernier message: 12/05/2005, 12h10
  5. [Double][NaN] identification d'un Type Not A Number
    Par bahamouth dans le forum Langage
    Réponses: 2
    Dernier message: 12/11/2004, 17h06

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