Bonjour
Tout est dans le titre.
Comment transtyper un extended en single et en double ?
Merci
Bonjour
Tout est dans le titre.
Comment transtyper un extended en single et en double ?
Merci
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;
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
Je n'ai que Delphi 7, mais dans sa doc il est bien écrit :
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.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
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.
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.
Partager