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

Delphi Discussion :

Transtypage : Extended -> Single/Double


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut Transtypage : Extended -> Single/Double
    Bonjour

    Tout est dans le titre.

    Comment transtyper un extended en single et en double ?

    Merci

  2. #2
    Membre émérite
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    En ne faisant rien.

    Une simple affectation suffit, du moins avec Delphi 2005.

    Le code suivant fonctionne chez moi, mais gare aux pertes de précision !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button1Click(Sender: TObject);
    var a:extended;b:single;
    begin
     a:=1/3;
     b:=a;
     ShowMessage(FloatToStr(a));
     ShowMessage(FloatToStr(b));
    end;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut
    Merci CapJack

    Le seul problème que je rencontre (d'où mon post) est le suivant :

    le domaine de définition d'un single est : [-1.5 x 10^45 .. 3.4 x 10^38]. C'est dans la documentation officielle de BDS 2006.

    Or si je teste les limites de ce domaine de définition, j'ai bien 3.4 x 10^38 pour l'extrême positif, mais je n'ai que -3.4 x 10^38 pour l'extrême négatif.

    Le domaine de définition d'un double est : [-5.0 x 10^324 .. 1.7 x 10^308]. Pareil, ce domaine de définition est tirée de la documentation officielle de BDS 2006.

    Là encore, si je teste les extrêmes, l'extrême positif vaut bien 1,7 x 10^308 mais l'extrême négatif lui ne vaut que -1.7 x 10^307.

    D'où mon interrogation et ma perplexité.

    Est ce que -1.5 x 10^45 = -3.4 x 10^38 pour un single ?

    et

    est ce que -5.0 x 10^324 = -1.7 x 10^307 pour un double ?

    Si je laisse le transtypage tel quel et que si j'entre un des extrêmes négatifs (single ou double), j'ai une erreur du type : 'Floating point overflow'.

    Existe-t-il une solution pour parer ce problème où on doit se contenter de faire avec ?

    Merci

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Par défaut
    Je n'ai que Delphi 7, mais dans sa doc il est bien écrit :
    Type Range
    Single 1.5 x 10^-45 .. 3.4 x 10^38
    Double 5.0 x 10^-324 .. 1.7 x 10^308
    Extended 3.6 x 10^-4951 .. 1.1 x 10^4932
    C'est à dire, pour un single par exemple que les valeurs positives non nulles sont comprises entre 1.5 x 10^-45 et 3.4 x 10^38. Les valeurs négatives étant comprises entre -3.4 x 10^38 et -1.5 x 10^-45.

    D'ailleurs la méthode de représentations de ces nombres (norme IEEE754 si mes souvenirs sont bons) affecte un bit pour le signe, donc il n'y a pas de raison que les limites soient différentes entre les nombres positifs et les nombres négatifs.

  5. #5
    Membre émérite
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    Oui, je n'ai pas répondu hier par manque de temps, mais je crois effectivement que notre ami confond puissances négatives et nombres négatifs, et donc limite "infiniment petite" coté positif avec limite "infiniment grande" (en valeur absolue) côté négatif .

Discussions similaires

  1. Transtypage single en TBytes
    Par Cbonniot dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 14/06/2007, 18h45
  2. Transtypage de 5,56200E+003 en double ?!
    Par tigunn dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2007, 17h27
  3. [MySQL] Sauvegarder du texte (db mysql) CR, single-quote, double-quote, etc
    Par vandeyy dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/03/2007, 11h22
  4. Problème de calculer avec textbox et produire un single ou double ?
    Par zizou2007 dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 27/01/2007, 18h59
  5. [VB.NET]Comment obtenir conversion exacte Single>Double?
    Par Misterburma dans le forum VB.NET
    Réponses: 9
    Dernier message: 09/02/2006, 22h24

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