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

Ada Discussion :

Fixed, delta et attribut succ


Sujet :

Ada

  1. #1
    Invité
    Invité(e)
    Par défaut Fixed, delta et attribut succ
    Bonjour,

    Je voulais identifier quelques objets avec des fixeds.

    alors je déclare un type T_Id de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     type T_Word_Id is delta 0.000_000_5 range 0.0..1.0;

    puis pour vérifier que je bien mon compte, je fait un test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure Main is
       Count : Natural := 1;
       Word_Id : T_Word_Id := T_Word_Id'First;
    begin
       loop
          Count := Count+1;
          Word_Id := T_Word_Id'Succ(Word_Id);
          exit when Word_Id = T_Word_Id'Last;
       end loop;
       Put("Count: " & Natural'Image(Count));
    end Main;
    Et magic ... enfin non, j'obtiens "Count: 2097153".

    J'ai 97153 id en bonus

    Pourquoi j'ai pas 2_000_000 tout rond ?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Et puis ça aussi

    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
     
    procedure Main is
     
       type T_Word_Id is delta 0.000_000_000_5 range 0.0..1.0;
     
       package Word_Id_Io is new Fixed_Io(T_Word_Id);
       use Word_Id_Io;
     
       Word_Id : T_Word_Id := 0.0;
    begin
          Put("Word_Id: ");
          Put(Word_Id);
          New_Line;
          Word_Id := Word_Id + 0.000_000_5;
          Put("Word_Id: ");
          Put(Word_Id);
    end Main;
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Word_Id:  0.0000000000
    Word_Id:  0.0000004997
    Pourquoi j'ai pas 0.000_000_5 en second Word_Id ?

    Merci

  3. #3
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 70
    Points : 66
    Points
    66
    Par défaut
    Salut,
    2097153 = 2^21 +1
    Ca pourrait bien être une idée de depart ...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Orni-Dev Voir le message
    Salut,
    2097153 = 2^21 +1
    Ca pourrait bien être une idée de depart ...
    Je ne sais pas, je suis nul en math.

    Tous ce que je vois, c'est que j'ajoute 0.000_000_5 et ça me fais pas l'adition.

  5. #5
    Membre actif Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Points : 209
    Points
    209
    Par défaut
    Tu devrais pourtant, parce que
    1/(2^21) = ... 0.0000004997

    Tu as donc un joli problème de précision, ce qui est dommage, c'est pas vraiment le but de "delta"...

    Le langage ne garantit une représentation exacte que si delta est une puissance de 2, ce qui n'est pas le cas ici.Avec l'attribut SMALL, on peut connaître la précision utilisée (SMALL = PAS), mais on peut aussi forcer le SMALL à une valeur particulière et exacte via une clause de représentation.
    Elles peuvent être refusées par le compilateur. Mais, si elles "passent" à la compilation, elles sont garanties.

    (source)
    Essayes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for T_Word_Id'SMALL use 0.000_000_000_5;
    Dans ces conditions les calculs devraient être exacts (mais tous les compilateurs ne l'acceptent pas parrait-il).

  6. #6
    Invité
    Invité(e)
    Par défaut
    Yes,

    Merci bien Gaillac.

  7. #7
    Membre actif Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Points : 209
    Points
    209
    Par défaut

    On remercira ce monsieur Daniel Feneuille aussi...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Yep !

    Merci de me le rappeler !

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 21/09/2012, 14h05
  2. Parser XML avec jQuery pour un attribut fixé
    Par tonio17 dans le forum jQuery
    Réponses: 7
    Dernier message: 14/12/2011, 20h19
  3. jquery mobil avec l'attribut data-position="fixed"
    Par franklin19 dans le forum jQuery
    Réponses: 0
    Dernier message: 18/07/2011, 10h02
  4. Réponses: 10
    Dernier message: 10/05/2010, 15h09
  5. attribut fixe en sql
    Par Elay dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 23/11/2006, 22h14

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