Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1439 connectés 

  FORUM HardWare.fr
  Programmation
  Ada

  Arrondi d'un point floattant

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Arrondi d'un point floattant

n°1842233
Profil sup​primé
Posté le 23-01-2009 à 18:16:00  answer
 

Bonjour,
 
j'ai définit un type point fixe de la manière suivante :
 

Code :
  1. type T_Alphabet is delta 0.01 range 0.0..1.0;


Et j'utilise un un type point flottant définit comme suit :

Code :
  1. type Real is digits System.Max_Digits;


 
Je souhaite obtenir l'arrondi à 0.01 pré du type Real pour l'affecter au type T_Alphabet.
 
Exemple :  
var_real = 9.59600000000000E-2 => je veux affecter 0.1 à une variable de type T_Alphabet.
 
Comment faire ? Merci.

mood
Publicité
Posté le 23-01-2009 à 18:16:00  profilanswer
 

n°1842241
Un Program​meur
Posté le 23-01-2009 à 18:39:18  profilanswer
 


 
Il y a un attribut (de memoire: T_Alphabet'Round(var_real)).  Est-tu sur que tu ne voudrais pas
plutot

Code :
  1. type T_Alphabet is delta 0.01 digits 2;


pour avoir un type decimal?

n°1842273
Profil sup​primé
Posté le 23-01-2009 à 19:29:49  answer
 

Un Programmeur a écrit :


 
Il y a un attribut (de memoire: T_Alphabet'Round(var_real)).  Est-tu sur que tu ne voudrais pas
plutot

Code :
  1. type T_Alphabet is delta 0.01 digits 2;


pour avoir un type decimal?


 
C'est possible ! Parce qu'en effet, l'attribut Round prend un préfixe de type décmal.
Je suis un peu dans la confusion avec ce genre de type.
 
J'ai testé une simple conversion : Var_Alphabet := T_Alphabet(Var_Real); ça donne pas mal.
Je vais voir ce que me dis le compilateur en déclarant mo type T_Alphabet comme tu le suggères.

n°1842301
Profil sup​primé
Posté le 23-01-2009 à 19:59:36  answer
 


j'ai déclaré le type T_Alphabet is deltat 0.01 digits 2;  Et à l'utilisation de l'attribut Round Constraint_Error(Range check failed) est levée.
 
T'es sûr de ton coup ?

n°1842311
Profil sup​primé
Posté le 23-01-2009 à 20:18:10  answer
 

Avec Var_Real = 9.999*E-01,  Je remarque qu'une simple conversion lève la même erreur.
 
 
 

n°1842314
Un Program​meur
Posté le 23-01-2009 à 20:22:06  profilanswer
 


 
Ca fait 10 ans que je n'ai plus fait d'Ada.  Mais ceci a l'air de faire ce que tu veux.

Code :
  1. with Ada.Text_IO;
  2. procedure Rounding is
  3.    type Decimal is delta 0.01 digits 2;
  4.    package DIO is new Ada.Text_IO.Decimal_IO(Decimal);
  5.    X : Long_Float := 9.596E-2;
  6.    D : Decimal;
  7. begin
  8.    D := Decimal'Round(X);
  9.    DIO.Put(D);
  10.    Ada.Text_IO.New_Line;
  11. end;

n°1842316
Profil sup​primé
Posté le 23-01-2009 à 20:45:06  answer
 

Un Programmeur a écrit :


 
Ca fait 10 ans que je n'ai plus fait d'Ada.  Mais ceci a l'air de faire ce que tu veux.

Code :
  1. with Ada.Text_IO;
  2. procedure Rounding is
  3.    type Decimal is delta 0.01 digits 2;
  4.    package DIO is new Ada.Text_IO.Decimal_IO(Decimal);
  5.    X : Long_Float := 9.596E-2;
  6.    D : Decimal;
  7. begin
  8.    D := Decimal'Round(X);
  9.    DIO.Put(D);
  10.    Ada.Text_IO.New_Line;
  11. end;



 
Oui, ton programme fonctionne. Mais avec une valeur de X telle que 9.999E-02, ça ne fonctionne plus.
 
 

n°1842318
Profil sup​primé
Posté le 23-01-2009 à 20:48:26  answer
 

avec x = 9.999E-1
 
 
Pardon

n°1842328
Profil sup​primé
Posté le 23-01-2009 à 21:46:30  answer
 

Merci Un Programmeur !
 
j'ai pigé pourquoi 9.999E-1 lève un erreur de contrainte.

n°1842400
Un Program​meur
Posté le 24-01-2009 à 10:16:30  profilanswer
 

Pour les archives: 0.999E-1 est arrondi à 1.00 et le type décimal delta 0.01 digits 2 ne représente des valeurs que jusqu'à 0.99.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ada

  Arrondi d'un point floattant

 

Sujets relatifs
Problème GTK - point d'entrée de précédure introuvableTrouver un point différents d'autres points
[PHP] Librairie graphique php - Valeur du point en survolAffichage de point!!!!!!
[Access] fonction arrondi sup[Javascript] Tester l'existence d'un point avec l'api google map
Jpgraph - Afficher un seul point avec $lineplot->value->show();Mise au point : dépendance sur une librairie systeme, migration de pro
Dessiner un point sur un pixmap avec GTK2Tirer une point aléatoire dans cercle sur une sphère
Plus de sujets relatifs à : Arrondi d'un point floattant


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR